crontab 내의 쉘 스크립트

crontab 내의 쉘 스크립트

예상대로 명령 프롬프트에서 다음 셸 스크립트를 실행할 수 있습니다.

/bin/sh -xv /home/shantanu/backup_transfer.sh 

하지만 cron에 설정하면 올바르게 실행되지 않습니다. 2개의 명령어가 있습니다. SSH -t[이메일 보호됨]"sudo ls" 및 sudo rsync -avze를 다른 서버로 보냅니다.

명령 프롬프트에서 성공적으로 실행되는 쉘 스크립트가 cron에서 실패하는 이유는 무엇입니까?

$ which sh
/bin/sh

나는 올바른 환경을 사용하고 있는가?

업데이트:

Error for the first ssh -t command:
Pseudo-terminal will not be allocated because stdin is not a terminal.
sudo: sorry, you must have a tty to run sudo

Error for the second sudo rsync command: 
sudo: sorry, you must have a tty to run sudo

명령 프롬프트에서 스크립트를 실행하는 동안 오류가 발생하지 않았습니다.

답변1

sudo tty 오류를 수정하려면 sudo 명령을 실행하는 호스트에서 /etc/sudoers 파일을 수정해야 합니다.

#Here is an example of how to turn off the requirement of a tty for a user called "USERNAME"
Defaults:USERNAME !requiretty

답변2

/etc/sudoers를 업데이트하고 !requiretty를 삽입하는 것이 가장 좋은 옵션입니다. 그러나 어떤 경우에는 /etc/sudoers에서 requiretty를 활성화/비활성화하기 위해 원격 시스템에 액세스할 수 없을 수도 있습니다.

이러한 상황에서는 해결 방법으로 이중 tt를 사용할 수 있습니다. double tt는 cron에서도 작동합니다.

ssh -tt user@remoteserver /some/dir/remotecommand

관련 정보