在我的 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
想法?
编辑(本次讨论沉默 9 个月后):
今天来自 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
. 我是不是太老派了?
crond
运行一次:anacron
运行一次:crond
开始anacron
,这就是为什么你没有看到它的过程:我刚刚在我们的一台服务器上发现了同样的情况。据我交谈过的人说,anacron 更适用于可能在一夜之间断电的个人电脑,而不是理论上 24/7 运行的服务器;anacron 查找在机器关闭时可能丢失的作业。我发现它的机器是 24/7 类型的服务器,而 /etc/anacrontab 文件只是(重新)运行 cron.daily、cron.weekly 和 cron.monthly。我从我发现正在执行此操作的服务器中删除了 anacron,希望这能解决它。