有时,crontab不会被cron守护进程重新加载

我在问这个问题,因为我在这里找不到答案:
为什么我的crontab无法正常工作,我该如何排除故障?

上下文

我们有几个运行debian / wheezy的服务器。

一个备份任务要求我们在备份过程中停用特定用户的crontab,所以我们有一个脚本,每天运行一次,这个脚本大致是这样的:

# user is legec : # save the crontab to a file crontab -ulegec -l > /home/legec/.backup/crontab # empty the crontab echo "" | crontab -ulegec backup ... # reload crontab cat /home/legec/.backup/crontab | crontab -ulegec 

而且这个工作正如我们所期望的,绝大多数时候都是这样

该任务在〜80台服务器上运行; 取决于服务器,备份任务将需要1分钟到2小时。

窃听器

偶尔,cron将不会检测到最后一次重新加载,并且不会执行crontab中列出的任何作业。

/var/spool/cron/crontabs/legec具有预期的内容,修改date:

 $ ls -lh /var/spool/cron/crontabs/legec -rw------- 1 legec crontab 6.7K Sep 22 04:03 /var/spool/cron/crontabs/legec 

但cron日志表明,cron没有检测到最后一次更改:

 $ cat /var/log/cron.log | grep -E "LIST|RELOAD|REPLACE" ... # yesterday's backup : all went fine Sep 21 04:00:06 lgserver crontab[6670]: (root) LIST (legec) Sep 21 04:00:06 lgserver crontab[6671]: (root) LIST (legec) Sep 21 04:00:06 lgserver crontab[6673]: (root) REPLACE (legec) Sep 21 04:01:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec) Sep 21 04:03:01 lgserver crontab[7071]: (root) REPLACE (legec) Sep 21 04:03:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec) # today's backup : no final RELOAD event Sep 22 04:00:07 lgserver crontab[24163]: (root) LIST (legec) Sep 22 04:00:07 lgserver crontab[24164]: (root) LIST (legec) Sep 22 04:00:07 lgserver crontab[24166]: (root) REPLACE (legec) Sep 22 04:01:01 lgserver /usr/sbin/cron[2025]: (legec) RELOAD (crontabs/legec) Sep 22 04:03:01 lgserver crontab[24458]: (root) REPLACE (legec) # no RELOAD line here 

“曾经有一段时间”的意思是:没有规律性,我们每个月都会看到这个bug,一个正在运行的〜80个随机服务器上。

有没有人在哪里看铅?

首先,为了安全起见,我build议使用适当的forms处理crontab 。 亦即

 crontab -u user -r 

删除他的crontab,并且

 crontab -u user backed_up_crontab_file 

恢复。

其次,你的时间可能是重要的。 如果用户的crontab很less运行,也许在恢复之后运行1次就会失败,因为在实际恢复之前它会启动一分钟。