有人可以解释一下为什么我假设的每周 cron 作业会在周日早上 06:47 运行,但实际上却是在周二早上 00:10 运行的吗?
这是一个相当原始的 Debian Stretch 盒子(已经等待使用一段时间了)。
我有以下 crontab:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
以及以下 anacrontab:
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
HOME=/root
LOGNAME=root
# These replace cron's entries
1 5 cron.daily run-parts --report /etc/cron.daily
7 10 cron.weekly run-parts --report /etc/cron.weekly
@monthly 15 cron.monthly run-parts --report /etc/cron.monthly
/usr/sbin/anacron 存在并且可以执行。
日期:
Tue 29 Jan 15:26:23 UTC 2019
正常运行时间:
15:26:30 up 41 days, 7:03, 2 users, load average: 0.00, 0.00, 0.00
Syslog 显示每周的 cronjob 于今天早上 00:10(星期二)运行:
Jan 29 00:10:10 RT-ARCHIVE anacron[48734]: Job `cron.weekly' started
Jan 29 00:10:10 RT-ARCHIVE anacron[49100]: Updated timestamp for job `cron.weekly' to 2019-01-29
为什么是星期二?如果系统刚刚启动,我可能知道它会通过 anacron 进行追赶,但事实并非如此。
另外,这项工作并没有在周日进行,只是为了明确这一点。
我以前使用过 cron,没有出现问题,我遗漏了什么???
编辑:
提醒到这里的所有人,到目前为止,我只(故意)使用过 cron,而不是 anacron。读完这篇文章后,我意识到我提供的较新的虚拟服务器默认安装了 anacron,而较旧的虚拟服务器则没有。根据 Debian Wiki,anacron 是:
在笔记本电脑上由 Debian-Installer 默认安装,并使用桌面任务
因此也许我们的 IT 人员已经开始以不同的方式设置它们......
答案1
/etc/crontab
仅当/usr/sbin/anacrontab
不存在或不可执行时,运行中的三个条目。
注意它们以 开头test -x /usr/sbin/anacrontab
。这个命令首先运行,然后由于后面跟着||
,所以只有当前一个命令失败时才会运行后面的命令。
正如文件中的注释anacrontab
所述,它会覆盖这三个条目。
因此,anacrontab 中的 weekly 条目每 7 天运行一次,延迟 10 分钟。由于您未指定START_HOURS_RANGE
,因此它们会在午夜过后的指定分钟数运行。