我通过 crontab 设置为每分钟运行一次的 shell 脚本遇到了一个特殊问题。
我使用 Pelican 作为博客平台,并希望在有新帖子时以半自动化方式更新网站。为此,我创建了一个脚本来在与内容相同的目录中查找名为 respawn
的文件(它通过 Dropbox 同步,因此我只需在其中创建同步到服务器的文件)。
脚本是这样编写的,如果文件 respawn
存在,那么它会重建博客并将其删除。如果不是,则退出。
这是名为 publish.sh
的脚本
#!/bin/bash
Respawn="/home/user/content/respawn"
if [ -f $Respawn ]
then
sudo /home/user/sb.sh;rm $Respawn
else
exit 0
fi
exit 0
这是 shell 脚本的 crontab
* * * * */home/user/publish.sh
最后,这是 sb.sh
制作 html -C/var/www/site/
现在,如果我通过 SSH 运行脚本并且 respawn
存在,它会完美运行。但是,如果我让 cron 执行它,那么它不会运行 shell 脚本,但它仍然会删除 respawn
文件。
我还有另一个 cron 作业,它每 4 小时运行一次,只需运行 sb.sh
即可完美运行(以防我忘记发布某些内容)。
我试过使用用户的 crontab 并将其添加到 root 中,我还将用户添加到 sudoers 文件中,这样它就可以在没有密码干预的情况下运行。两者似乎都不起作用。我错过了什么吗?
最佳答案
必须是sudo
。 cron
无法输入密码。
检查运行 cron 的用户的邮件以确认。类似于 sudo: no tty present
。
关于linux - 作为 cron 作业运行时,shell 脚本无法完全运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15636997/