로컬 Linux 호스트에서 원격 bash 스크립트를 실행하고 "echo 명령이 작동하지 않음" 실행

로컬 Linux 호스트에서 원격 bash 스크립트를 실행하고 "echo 명령이 작동하지 않음" 실행

다른 시스템에서 원격으로 실행하려는 bash 스크립트가 있습니다. 원격 시스템의 사용자에게 cronjob을 추가하기만 하면 됩니다.

내 로컬 시스템에서 실행하고 있습니다.

ssh root@remote_system 'bash -s < /home/user_name/test2.sh'

이것은 원격 시스템에서 실행되는 스크립트입니다.

#!/bin/bash
set -x
#valhost=$(hostname)
if [ -d /home/user/junk ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete" >> /home/user_name/mycron
        crontab -u user_name /home/user_name/mycron
elif [ -d /home/user_name/tmp ]
then
        touch /var/spool/cron/user_name
        crontab -l -u user_name > /home/user_name/mycron
        chmod +x /home/user_name/mycron
        echo "0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +60 -delete" >> mycron
        crontab -u user_name /home/user_name/mycron
else
    echo "directory does not exist on" $HOSTNAME  > /home/user_name/jbossjunk
fi

디렉토리가 존재하는지 확인한 다음 특정 항목을 crontab에 넣습니다. 실제 원격 시스템에서 스크립트를 실행하면 스크립트가 제대로 실행됩니다. 하지만 로컬에서 실행하면 에코가 "mycron" 파일로 출력되지 않습니다. 여러 곳을 검색했지만 작동하는 구문을 찾지 못했습니다. 나는 좋은 결과를 얻지 못한 채 여러 구문 변형을 시도했습니다. 원격으로 스크립트를 실행하는 데 사용할 수 있는 "echo" 줄의 구문을 알려줄 수 있는 사람이 있나요?

답변1

출력이 처리되는 tee방식 이 .teeecho

if [ -d /home/user/junk ]
then
    touch /var/spool/cron/user_name
    crontab -l -u user_name > /home/user_name/mycron
    chmod +x /home/user_name/mycron
    tee /home/user_name/mycron <<-EOF &>/dev/null
    0 0 * * * /bin/find /home/user_name \( -name '*' \) -mtime +45 -delete
    EOF
    crontab -u user_name /home/user_name/mycron
elif

heredoc이 예에서는 지정된 파일을 읽습니다 tee. 명령 &>/dev/null의 STDOUT 및 STDERR을 /dev/null로 보내지만 지정된 파일에 쓰는 데에는 tee영향을 주지 않습니다 .tee

답변2

7개의 참조 문이 있습니다 /home/user_name/mycron (그런데 문자 그대로는 아닌 것으로 가정합니다). 하나는 단순한 참조(즉, 절대 경로 이름이 아닌 상대 경로 이름)입니다. 스크립트를 실행하면/home/user_name/mycronuser_namemycron~에서 /home/user_name, 그들은 동일합니다. 에서 스크립트를 실행하면 /rootecho명령문이 에 기록됩니다 /root/mycron.

추신: 절대 이렇게 할 필요는 없습니다 chmod +x /home/user_name/mycron.

관련 정보