我有一个安装了以下软件包的CentOS 6.6服务器:
crontabs-1.10-33.el6.noarch cronie-1.4.4-12.el6.x86_64 cronie-anacron-1.4.4-12.el6.x86_64 kernel-2.6.32-504.3.3.el6.x86_64
有时,计划每天运行的备份作业之一根本无法运行.甚至根据/var/log/cron.log调用该脚本.
有趣的是,计划在同一时间运行的其他工作没有任何问题.
我无法重现问题,也没有发现任何图案.如果我什么都不做,那么第二天的工作就会按预期正确运行.
crond只是忽略了应该在特定时间运行的多个作业中的一个.这只是偶尔发生的.
我在其他几个地方读过人们谈论在crontab文件的末尾添加一个空行.偶尔无法运行的作业确实位于我的crontab文件的最后一行.
我找不到任何确认这是一个真实或已知的错误.
# tail -2 /var/spool/cron/postgres * * * * * OTHERJOB 0 21 * * * /pg_backup.sh
这就是我在/var/log/cron.log中的全部内容
Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19394]: (root) CMD (OTHERJOB) Mar 31 21:00:02 SERVERNAME [cron.info] CROND[19418]: (postgres) CMD (/pg_backup.sh) Mar 31 21:01:02 SERVERNAME [cron.info] CROND[20062]: (root) CMD (OTHERJOB) Apr 1 21:00:02 SERVERNAME [cron.info] CROND[31349]: (root) CMD (OTHERJOB) Apr 1 21:01:01 SERVERNAME [cron.info] CROND[32080]: (root) CMD (OTHERJOB)
看看OTHERJOB在4月1日如何运行,pg_backup.sh甚至没有被执行.
我已经尝试重启crond但这种情况一直在发生.这会影响具有相同版本的OS,内核和cron RPM的多个服务器.
有一个较新版本的cronie(1.4.12),但升级它不是一个选项,因为我们已经使用Centos 6.6的最新版本
我经历了所有cronie版本的更新日志(1.4.4),似乎没有解决这个特殊问题.还检查了all commit messages.
解决方法
原始的cron要求每个条目以换行符结束,所以有时你需要一个空行或者最后的东西.
Although cron requires that each entry in a crontab end in a newline character,neither the crontab command nor the cron daemon will detect this error. Instead,the crontab will appear to load normally. However,the command will never run. The best choice is to ensure that your crontab has a blank line at the end. 4th Berkeley Distribution 29 December 1993 CRONTAB(1)
有些版本修复它或发出警告,例如Ubuntu Maverik(10.10):crontab查看底部的诊断部分,该部分声明警告将写入syslog.
DIAGNOSTICS cron requires that each entry in a crontab end in a newline character. If the last entry in a crontab is missing a newline (ie,terminated by EOF),cron will consider the crontab (at least partially) broken. A warning will be written to syslog.