2013-03-26 70 views
0

我遇到了一个特殊问题,我已经设置为通过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文件,以便它可以在没有密码干涉的情况下运行。这两者似乎都不起作用。我错过了什么吗?

+0

一个明显的猜测是,cron没有找到'sudo'的路径,你可以尝试在脚本中放置'/ usr/bin/sudo',而不是'sudo'吗? – favoretti 2013-03-26 12:28:29

+0

此外,为了防止'respawn'文件被移除,可以在命令之间放置'&&',而不是';',那么只有当第一个命令返回'0'时,第二个命令才会被执行,即成功。 – favoretti 2013-03-26 12:29:31

回答

1

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

+0

用户和root都有'/ usr/bin/make'作为'PATH'。奇怪的是,如果我将它添加到根crontab或用户的上面的脚本不起作用。 – jordanmerrick 2013-03-26 12:51:17

+0

好吧,那一定是'sudo'。 cron不能输入密码。检查运行cron的用户的邮件以确认。像“sudo:没有tty礼物”。 – suspectus 2013-03-26 13:27:18

+0

是的!感谢嫌疑人,就是这样!你描述的确切的错误信息是坐在那里让我错过:)我将这标记为答案。很多,非常感谢。 – jordanmerrick 2013-03-26 14:42:33

0

尝试改变sudo /home/user/sb.sh;rm $Respawn

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

sudo没有必要在这种情况下运行命令,因为它会被调用反正作为根。

+0

谢谢,但它似乎没有什么区别('sudo'仍然需要用户执行脚本,但即使将其添加到用户的crontab它仍然不会执行脚本的那部分) – jordanmerrick 2013-03-26 12:52:57

+0

是上面的根用户crontab或另一个用户权限选项卡? 如果是另一个用户,可以用这行'USERNAME ALL =(ALL)NOPASSWD:/ home/user/sb.sh'将它们添加到sudoers中 – bsmoo 2013-03-26 13:21:43