crontab 中的 shell 腳本

crontab 中的 shell 腳本

我可以按預期從命令提示字元執行以下 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

相關內容