在 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 上无效(这似乎是您正在使用的)。
我做了以下操作来验证事情在原则上是否正常工作,您可能需要遵循此过程以至少确保我们以相同的方式做事:
- 成为 root (我通常会这么做
sudo -i
)。这是因为您说您想以 root 身份执行此操作。 crontab -e
。您将进入编辑器来编辑 crontab 文件。添加以下行(调整为当地时间,以便它在接下来的 3 分钟内运行。给自己一些时间完成输入并保存文件)。
05 10 * * * date >>/tmp/crontest.txt
- 删除或注释掉 crontab 文件中的所有其他内容。
- 保存文件并退出编辑器
- 通过运行确认 cron 已正确安装
crontab -l
- 等到配置的时间
- 确认 /var/log/syslog 中出现如下行:
May 30 10:05:01 snowflake CRON[4170]: (root) CMD (date >>/tmp/crontest.txt)
最后确认/tmp/crontest.txt
已创建并包含预定的时间/日期。
Cron 在 Unix/Linux 中已经存在了很长时间,它已经过测试并且可靠,所以你所遇到的不是一个错误,而且你似乎做得对,所以必须可能是其他因素影响了其正常运行。希望我们可以通过一些诊断程序确定是什么原因 :)