예상대로 명령 프롬프트에서 다음 셸 스크립트를 실행할 수 있습니다.
/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