![crontab 中的 shell 脚本](https://linux22.com/image/567821/crontab%20%E4%B8%AD%E7%9A%84%20shell%20%E8%84%9A%E6%9C%AC.png)
我可以按预期从命令提示符运行以下 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