在我的 CentOS 7 服务器上,一个应该可以正常运行的夜间备份脚本生成的错误导致我检查了我的 cron 活动。我发现它cron.daily
运行了两次 - 这是我删除备份脚本后的相关部分,/var/log/cron
以查看它是否以某种方式导致了问题:
Oct 10 02:28:01 mail CROND[1750]: (root) CMD (run-parts /etc/cron.hourly)
Oct 10 02:28:01 mail run-parts(/etc/cron.hourly)[1750]: starting 0anacron
Oct 10 02:28:01 mail anacron[1759]: Anacron started on 2017-10-10
Oct 10 02:28:01 mail run-parts(/etc/cron.hourly)[1761]: finished 0anacron
Oct 10 02:28:01 mail anacron[1759]: Normal exit (0 jobs run)
Oct 10 02:30:01 mail CROND[1766]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 02:40:01 mail CROND[1847]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 02:50:01 mail CROND[1936]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:00:01 mail CROND[2032]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:10:01 mail CROND[2148]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:17:01 mail CROND[2223]: (root) CMD (run-parts /etc/cron.daily)
Oct 10 03:17:01 mail run-parts(/etc/cron.daily)[2223]: starting kizunademo
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2259]: finished kizunademo
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2223]: starting logrotate
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2266]: finished logrotate
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2223]: starting man-db.cron
Oct 10 03:17:02 mail run-parts(/etc/cron.daily)[2277]: finished man-db.cron
Oct 10 03:20:01 mail CROND[2288]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:28:01 mail CROND[2367]: (root) CMD (run-parts /etc/cron.hourly)
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2367]: starting 0anacron
Oct 10 03:28:01 mail anacron[2376]: Anacron started on 2017-10-10
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2378]: finished 0anacron
Oct 10 03:28:01 mail anacron[2376]: Will run job `cron.daily' in 35 min.
Oct 10 03:28:01 mail anacron[2376]: Jobs will be executed sequentially
Oct 10 03:30:01 mail CROND[2381]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:40:01 mail CROND[2462]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 03:50:02 mail CROND[2547]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 04:00:01 mail CROND[2670]: (root) CMD (/usr/lib64/sa/sa1 1 1)
Oct 10 04:03:01 mail anacron[2376]: Job `cron.daily' started
Oct 10 04:03:01 mail run-parts(/etc/cron.daily)[2685]: starting kizunademo
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2721]: finished kizunademo
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2685]: starting logrotate
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2728]: finished logrotate
Oct 10 04:03:02 mail run-parts(/etc/cron.daily)[2685]: starting man-db.cron
Oct 10 04:03:03 mail run-parts(/etc/cron.daily)[2739]: finished man-db.cron
Oct 10 04:03:03 mail anacron[2376]: Job `cron.daily' terminated
Oct 10 04:03:03 mail anacron[2376]: Normal exit (1 job run)
为什么要cron.daily
运行两次?如您所见,日志包含一些与第二次运行相关的条目,而第一次运行中没有这些条目:两行宣布即将运行,另外两行表示它以正常退出的方式终止。第一次运行只是运行了脚本,没有额外的宣传。我想这意味着什么,但我不知道是什么。
我检查了所有我能想到的重复问题。我很确定我已经阅读了关于这个主题的所有类似帖子,所以在称其为重复问题之前,请先与以下内容进行比较。基于为什么 cron 运行两次?我检查了额外的进程 - 完整的输出ps aux | grep cron
如下,所以只有一个进程:
root 9383 0.0 0.2 112672 2340 pts/0 S+ 15:18 0:00 grep --color=auto cron
root 25624 0.0 0.0 126248 320 ? Ss Sep30 0:02 /usr/sbin/crond -n
基于Cron 作业运行两次 - Ubuntu 服务器 12.04我也检查了一下crontab -l -u root
,上面说no crontab for root
。
这是我的 /etc/crontab:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
28 * * * * root run-parts /etc/cron.hourly
17 3 * * * root run-parts /etc/cron.daily
44 2 * * 0 root run-parts /etc/cron.weekly
8 2 7 * * root run-parts /etc/cron.monthly
有什么想法吗?
编辑(此讨论沉寂九个月后):
今天 Marin Velikov 的评论让我意识到有一个anacrontab
文件(我知道这很傻,但我甚至没想到)。以下是其内容:
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
原来这就是原因啊。但是为什么要将系统配置为同时运行这两者呢?我猜是有人比我聪明,所以在知道目的之前我犹豫着要不要乱动它。如果我确实应该删除 或 中的条目crontab
,anacrontab
哪一个最好?Anacron 显然是更复杂的工具,但清空 似乎很奇怪/错误crontab
。我是不是太老派了?
答案1
为什么 cron.daily 运行两次?
crond
运行一次:
Oct 10 03:17:01 mail CROND[2223]: (root) CMD (run-parts /etc/cron.daily)
anacron
运行一次:
Oct 10 04:03:01 mail anacron[2376]: Job `cron.daily' started
crond
已启动anacron
,这就是为什么您没有看到它的进程:
Oct 10 03:28:01 mail CROND[2367]: (root) CMD (run-parts /etc/cron.hourly)
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2367]: starting 0anacron
Oct 10 03:28:01 mail anacron[2376]: Anacron started on 2017-10-10
Oct 10 03:28:01 mail run-parts(/etc/cron.hourly)[2378]: finished 0anacron
Oct 10 03:28:01 mail anacron[2376]: Will run job `cron.daily' in 35 min.
Oct 10 03:28:01 mail anacron[2376]: Jobs will be executed sequentially
答案2
我刚刚在我们的一台服务器上发现了同样的情况。据我交谈过的那个人说,anacron 更适用于可能在夜间关闭的单个 PC,而不是理论上全天候运行的服务器;anacron 会查找机器关闭时可能错过的作业。我发现这种情况的机器是一台全天候类型的服务器,/etc/anacrontab 文件只是(重新)运行 cron.daily、cron.weekly 和 cron.monthly。我从发现有这种情况的服务器上删除了 anacron,希望这能解决这个问题。