为什么 `/etc/crontab` 中的 `cron.hourly` 行是唯一没有 `test -x /usr/sbin/anacron` 的行?

为什么 `/etc/crontab` 中的 `cron.hourly` 行是唯一没有 `test -x /usr/sbin/anacron` 的行?

我还没有改变我的/etc/crontab。它仍然是默认内容,这也是许多Linux发行版的默认内容:

# /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 )
#

为什么该行是cron.hourly唯一没有 的行?为什么中也test -x /usr/sbin/anacron没有?cron.hourlyanacrontab


更新:

正如@Giacomo1968 评论的那样,“到底做什么?”的答案test -x /usr/sbin/anacron可以在以下位置找到:https://unix.stackexchange.com/questions/26088/etc-crontab-what-does-test-x-stand-for例如。但主要问题仍然存在:为什么的流程cron.hourly与其他线路不同?

答案1

因为最小周期阿纳克隆被设计为每天工作,所以它不能用于管理每小时的 cron 作业。

Anacron 旨在处理非常具体的用例,即确保不经常运行的 cron 作业在不总是开机的系统上仍能运行。实际上,几乎没有什么需要每小时运行一次,如果错过了每小时运行,则需要立即运行。鉴于此,Anacron 的开发人员决定允许使用更简单(也更可靠)的代码,该代码不关注之前任务的运行时间,只关注运行日期。反过来,这意味着 Anacron 的设计是以天为单位运行的,而不是像大多数 cron 实现那样以小时或分钟为单位运行,因此它不能用于处理每小时作业。

实际上,Anacron 本身也不做任何调度,这就是为什么你的那些条目/etc/crontab存在的原因,没有这些,anacron 将不会运行(或者可能只在启动时运行),所以它们存在是为了确保它即使系统长时间开启也能运行。

就一般的小时作业而言,您可能会发现/etc/cron.hourly系统上是空的。大多数经典用途(或更频繁的 cron 作业)是确保某些内容是最新的,或通过轮询检查某些硬件或软件的状态。这两种用例都更适合使用事件驱动模型而不是轮询模型,因此通常已迁移到此类设计。

相关内容