0

我在设置为通过 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 文件中,因此它可以在没有密码干预的情况下运行。两者似乎都不起作用。我错过了什么吗?

4

2 回答 2

1

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

于 2013-03-26T12:29:31.810 回答
0

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

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

sudo没有必要在这种情况下运行您的命令,因为无论如何它都会以 root 身份调用。

于 2013-03-26T12:30:27.847 回答