作为cron作业运行时,shell脚本无法完全运行

时间:2013-03-26 12:22:32

标签: linux shell cron centos

我遇到了一个特殊的问题,我设置的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文件中,以便无需密码干预即可运行。似乎都没有用。我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

必须是sudocron无法输入密码。 检查运行cron的用户的邮件以确认。类似于sudo: no tty present

答案 1 :(得分:0)

尝试将sudo /home/user/sb.sh;rm $Respawn更改为

/home/user/sb.sh;rm $Respawn

在此上下文中运行命令不需要

sudo,因为无论如何它都将以root身份调用。