我遇到了一个特殊的问题,我设置的shell脚本每分钟都会通过crontab运行。
我使用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
make html -C /var/www/site/
现在,如果我通过SSH运行脚本并且respawn
存在,那么它可以完美运行。但是,如果我让cron执行它,那么它不会运行shell脚本,但它仍会删除respawn
文件。
我还有另外一个每4个小时运行一次的cron作业,只运行sb.sh
,它完美运行(如果我忘记发布某些内容)。
我尝试过使用用户的crontab以及将其添加到root用户,我还将用户添加到sudoers文件中,以便无需密码干预即可运行。似乎都没有用。我错过了什么吗?
答案 0 :(得分:1)
必须是sudo
。 cron
无法输入密码。
检查运行cron的用户的邮件以确认。类似于sudo: no tty present
。
答案 1 :(得分:0)
尝试将sudo /home/user/sb.sh;rm $Respawn
更改为
/home/user/sb.sh;rm $Respawn
sudo
,因为无论如何它都将以root身份调用。