Cron 作业在默认时间以外的任何时间失败 * * * * *

Cron 作业在默认时间以外的任何时间失败 * * * * *

在 Ubuntu 11.10 (Oneiric Ocelot) 上,如果我使用默认的 cron 任务,我的 cron 任务可以正常运行

* * * * *

但如果我想让它在 17 点或其他时间运行,它永远不会运行。我的设置是:

00 17 * * * wget http://www.abc.com/a.php

我也尝试过:

00 17 * * * root wget http://www.abc.com/a.php

我也尝试指定路径。有一个回车符,我以 root 身份登录

这是我的完整 crontab:

TZ=Australia/Sydney
22 7 * * * /usr/bin/wget http://www.abc.com/a.php
22 7 * * * /bin/date >> /tmp/date.txt

----输出如下:

root@Scrunch:~# sudo crontab -l -u root
55 12 * * * date >>/tmp/crontest.txt





root@Scrunch:~# 

为什么在输出 crontab 条目后,终端会显示这么多空白行?您是否怀疑给出了不必要的回车线......并且我没有给出任何其他 cron 空格条目,例如 .d、/daily 等。

答案1

分钟仅使用一个零。创建 cron 作业时,使用所用命令的完整路径通常也是一个好主意。这是因为 cron 作业在特殊的非常有限的 shell 环境中运行,并且您的路径可能与您登录时使用的路径不同。如果您不知道,可以使用 which 命令轻松找到它:

which wget

另外,最后一个命令root wget http://www.abc.com/a.php,是错误的。root不是一个有效的命令。我猜你是想使用 sudo。如果你以 root 身份运行 cron 作业,那么这是不必要的,即

sudo crontab -e

答案2

如果您的 cron 作业定义无效,这将被记录下来/var/log/syslog。我通常会将 cron 作业设置为从现在起 2 分钟后运行,然后tail -f /var/log/syslog确保一切按预期运行。

如果 中没有记录任何错误/var/log/syslog,但命令运行失败(或者即使成功),cron 也会通过电子邮件向您发送命令运行的控制台输出。如果您没有收到这些电子邮件(您可以查看/var/spool/mail/root),那么其他问题就出现了。我注意到您没有使用 wget 的 -Q 开关,因此您应该每次运行时都会收到电子邮件。

最后,第 6 个字段(在第三个示例中放置 root 的位置)是有效的仅有的在系统 crontab 文件(/etc/crontab或任何片段/etc/cron.{d,hourly,daily,weekly,monthly}目录)上。它在用户的 crontab 上无效(这似乎是您正在使用的)。

我做了以下操作来验证事情在原则上是否正常工作,您可能需要遵循此过程以至少确保我们以相同的方式做事:

  1. 成为 root (我通常会这么做sudo -i)。这是因为您说您想以 root 身份执行此操作。
  2. crontab -e。您将进入编辑器来编辑 crontab 文件。
  3. 添加以下行(调整为当地时间,以便它在接下来的 3 分钟内运行。给自己一些时间完成输入并保存文件)。

    05 10 * * * date >>/tmp/crontest.txt

  4. 删除或注释掉 crontab 文件中的所有其他内容。
  5. 保存文件并退出编辑器
  6. 通过运行确认 cron 已正确安装crontab -l
  7. 等到配置的时间
  8. 确认 /var/log/syslog 中出现如下行:

May 30 10:05:01 snowflake CRON[4170]: (root) CMD (date >>/tmp/crontest.txt)

最后确认/tmp/crontest.txt已创建并包含预定的时间/日期。

Cron 在 Unix/Linux 中已经存在了很长时间,它已经过测试并且可靠,所以你所遇到的不是一个错误,而且你似乎做得对,所以必须可能是其他因素影响了其正常运行。希望我们可以通过一些诊断程序确定是什么原因 :)

相关内容