我遇到了一个特殊问题,我已经设置为通过crontab运行每分钟的shell脚本。当作为定时任务运行时,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
make html -C /var/www/site/
现在,如果我通过SSH运行脚本,并且存在respawn
,则它可以很好地工作。但是,如果我让cron执行它,那么它不会运行shell脚本,但它仍会删除respawn
文件。
我有一个其他的cron工作,每4小时运行一次,它只是运行sb.sh
,它完美地工作(万一我忘记发布一些东西)。
我试过使用用户的crontab以及将其添加到根目录,而且我还将用户添加到sudoers文件,以便它可以在没有密码干涉的情况下运行。这两者似乎都不起作用。我错过了什么吗?
一个明显的猜测是,cron没有找到'sudo'的路径,你可以尝试在脚本中放置'/ usr/bin/sudo',而不是'sudo'吗? – favoretti 2013-03-26 12:28:29
此外,为了防止'respawn'文件被移除,可以在命令之间放置'&&',而不是';',那么只有当第一个命令返回'0'时,第二个命令才会被执行,即成功。 – favoretti 2013-03-26 12:29:31