【发布时间】:2013-03-16 05:51:33
【问题描述】:
我设置为通过 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的内容
make html -C /var/www/site/
现在,如果我通过 SSH 运行脚本并且存在respawn,它就可以完美运行。但是,如果我让 cron 执行此操作,则它不会运行 shell 脚本,但仍会删除 respawn 文件。
我还有一个每 4 小时运行一次的 cron 作业,它只运行 sb.sh,它运行良好(以防我忘记发布某些内容)。
我已经尝试使用用户的 crontab 并将其添加到 root,并且我还将用户添加到 sudoers 文件中,这样它就可以在没有密码干预的情况下运行。两者似乎都不起作用。我错过了什么吗?
【问题讨论】:
-
一个明显的猜测是 cron 没有找到
sudo的 PATH,您可以尝试将/usr/bin/sudo放入您的脚本中,而不仅仅是sudo吗? -
另外,为了防止
respawn文件被删除,你可以把&&放在命令之间,而不是;,那么只有当第一个命令返回0时,第二个命令才会被执行,即成功.