我在 cron 手册页上读到:
Cron 搜索
/var/spool/cron
以 中的帐户命名的 crontab 文件/etc/passwd
;找到的 crontab 被加载到内存中。 Cron 还搜索 目录中具有不同格式的/etc/anacrontab
任何文件(请参阅 参考资料)。 Cron 检查所有存储的 crontab 并检查每个作业以查看它是否需要在当前分钟运行/etc/cron.d
crontab(5)
然后它说:
/etc/crontab
系统定时任务。现在该文件默认为空。最初它通常用于运行每日、每周、每月的作业。默认情况下,这些作业现在通过 anacron 运行,它读取/etc/anacrontab
配置文件。请参阅anacrontab(5)
了解更多详情。
好的,我很清楚如果/etc/crontab
为空会发生什么。
我的问题是:如果无论如何都/etc/crontab
存在,什么时候读取它?
注意:手册页来自 CentOS 8。
答案1
答案取决于cron
您感兴趣的具体变体。
在 Debian 中,cron
守护进程是记录为/etc/crontab
在必要时重新加载:
与 一样
/etc/crontab
,监视目录中的文件/etc/cron.d
是否发生更改。
确实,主循环cron
在每次迭代时重新加载所有数据库(仅当文件发生更改时才会发生加载)。
在 Fedora 及其衍生品(包括 CentOS)中,cron
行为类似,并提供额外帮助(inotify
如果有)。
答案2
如果您有cron
一个记录crontab
文件的实现,那么您必须使用历史UNIX
变体。 30 多年来,该cron
实用程序的唯一有效接口是通过crontab
命令。
POSIX
这就是为什么根本不记录该实用程序的原因cron
,因为它是一个特定于实现的细节。
因此,请确保行为正确,并且仅用于crontab -l
列出 crontab 或crontab -e
编辑 crontab。
如果您编辑 crontab,该crontab
命令会将 crontab 文件存储在系统特定位置,并通知cron
实用程序 crontab 已更改并需要重新读取。