我可以按預期從命令提示字元執行以下 shell 腳本:
/bin/sh -xv /home/shantanu/backup_transfer.sh
但是當我在 cron 中設定它時,它無法正確執行。有 2 個指令。 ssh-t[電子郵件受保護]“sudo ls”和 sudo rsync -avze 到另一台伺服器。
為什麼 shell 腳本在命令提示字元下成功運行時會在 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 作為解決方法。雙 tt 甚至可以在 cron 中使用。
ssh -tt user@remoteserver /some/dir/remotecommand