Answers:
有一些实现cron
(不是全部,而且我不记得是哪个临时实现,但我在Linux下遇到过),这些实现每分钟都在每分钟检查更新的crontab文件,直到下一分钟才考虑新条目。因此,crontab最多可能需要两分钟才能启动。这可能是您观察到的。
fcron
也这样做。
您在cronjob之后是否添加了空行?
我遇到了同样的问题-在最后添加新条目后,工作的crontab突然停止了。原来,我忘了在最后一行之后加上换行符。
我通过发出命令发现了
cat /var/log/syslog | grep crontab
并且输出显示了问题:
Jul 2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul 2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)
添加换行符并保存可以解决此问题。
听起来像是固定的。下次,也尝试记录STDERR。以下内容将仅登录到STDOUT,而不是STDERR:
* * * * * echo hi >> /home/myusername/test
尝试确保对STDERR也有一个明确的子句。否则,取决于Cron的配置方式,STDERR可能会通过电子邮件发送给用户(假设电子邮件正在运行),或者根本不发送。
* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr
我的偏好是将cronjob输出发送到syslog。这样,我就可以利用任何现有的syslog基础结构(集中式syslog,Splunk,日志轮换已受支持,可以轻松比较/ var / log / messages和/ var / log / cronjob等中的消息),但我没有使用不必要的电子邮件向sysadmins(我)发送垃圾邮件。
* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob
你的cron线正常工作在我的电脑上,当我改变myusernae
到phunehehe
。有几种方法可以找出系统出了什么问题。
当出现问题时,Cron通常会将邮件发送给用户。如果看到消息“您有邮件”,请使用邮件客户端检查收件箱。或者,检查您的主目录,其中可能有一个名为的文件dead.letter
。
您可以检查/var/log/
与cron相关的条目。在我的计算机上,日志文件位于/var/log/cron/current
(需要root访问)。
如果您具有root用户访问权限,则可以停止cron守护程序并以调试模式启动它。例如,我将使用(更改fcron
为守护程序的名称):
killall fcron
fcron --foreground --debug
ps -ef | grep cron
,您应该看到cron的一行。检查cron的手册页以查看调试标志。您可能正在使用Vixie Cron,在这种情况下,调试标志为-x
。终止cron进程,然后使用附加标志再次启动它。
当cron发生故障时,很可能会生成一封电子邮件,发送给该计算机上cron作业的用户ID。如果您的计算机上没有MTA,或者您没有在其他地方阅读或转发该邮件,即使MTA正在工作,您也不会看到该消息。
通过邮件获取crontab错误的一种好方法是使crontab如下所示:
MAILTO="myemail@example.com"
* * * * * echo hi >> /home/myusernae/test
显然,使用您的电子邮件地址而不是myemail@example.com。这告诉cron将错误发送到您的电子邮件地址,而不是本地帐户。特别是,如果您有一个根crontab(或/etc/cron.d中的crontab片段)只想向您发送输出,则这很有用,您可以避免向root的邮箱或root的转发地址发送垃圾邮件。
我想这可能是因为/ home /目录已加密,并且用户注销后cron无法在该目录中执行任何操作。