我有一台正确触发cron作业的服务器。这是该服务器上的信息:
Ubuntu 12.04.5 LTS(GNU / Linux 3.13.0-32-generic x86_64)
crontab -l
* * * * * ( sleep 15 ; sudo /var/crons/NextQueueItemParallel.sh )
* * * * * ( sleep 45 ; sudo /var/crons/NextQueueItemParallel.sh )
未触发crons的服务器:
Ubuntu 12.04.4 LTS(GNU / Linux 3.16.5-x86_64-linode46 x86_64)
crontab -l
* * * * * ( sleep 30 ; sudo /var/crons/ParseLogs.sh )
我手动运行脚本,它可以工作。我验证了路径是否正确,并输入此调试代码以查看它是否被调用:
echo 1 >> /var/crons/test
php /var/www/crons/ParseLogFiles.php
我手动运行,并在测试结束时附加1,但不会单独出现。我已经安装了正确的cron和anacron服务,并尝试了这里列出的解决方案:
php cron job not running | http://growingventuresolutions.com/blog/ubuntu-cron-isn-t-running-some-things-check.html | Cron Job Doesn't Run
编辑1:
我通过发布sudo crontab -e
更新了当前无法正常工作的计算机上的crontab,现在存在以下行(我通过关闭并重新打开来验证):
* * * * * ( sleep 30 ; /var/crons/ParseLogs.sh )
(后面跟着一两行新品)
该文件由以下内容组成:
echo 1 >> /var/crons/test
php /var/www/crons/ParseLogFiles.php
我tail / var / crons / test(tail -f /var/crons/test
)但是没有看到任何附加内容并且脚本没有运行。当我手动运行这两个(通过复制行)时,它确实运行。
编辑2:
我没有执行权限,这就是为什么它在我手动运行但不在cron上运行的原因。我发出了以下命令chmod +x /var/crons/ParseLogs.sh
,它立即开始工作。如果你正在查看这个并且其他一切似乎都有效,请检查一下!感谢所有帮助过的人!
答案 0 :(得分:1)
我的猜测是其中一台服务器启用了requiretty
的{{1}}配置选项。
假设Ubuntu使用与Debian上游相同的设置,请检查sudo
或/etc/sudoers
目录中的文件,例如:
/etc/sudoers.d/
如果找到,请将其删除。
如果您控制服务器,另一个选项可能是将cron任务移动到root用户的crontab或/etc/cron.d目录中(此目录中的文件格式指定要运行的用户)< / p>
答案 1 :(得分:0)
我必须chmod +x /var/crons/ParseLogs.sh
才能让crontab执行它。由于我的云提供商以root身份创建了默认帐户,因此手动运行显然绕过了此限制。