我有一个GentooLinux系统和一个奇怪的crontab行为。作为root
用户,并且根据我对文档的理解,命令
crontab -l
列出为当前用户定义的所有crontab作业,
root
(没有为任何其他用户定义的crontab作业)。所有列出的cronjob也在文件/etc/cronjob
中定义。但是,还有两个
crontab
文件位于/etc/cron.d
中,它们分别定义了一个cronjob:/etc/cron.d/testcron1
/etc/cron.d/testcron2
尽管未与
crontab -l
一起列出,但会执行文件/etc/cron.d/testcron1
中定义的cronjob。文件/etc/cron.d/testcron2
中定义的另一个cronjob不执行。这一切都没有道理,所以我有两个问题:
为什么不列出所有的cronjobs?
必须在某处注册
crontab -l
中的cronjobs,还是需要重新启动守护程序/服务?为什么一个启动了,而不是另一个(可执行文件工作良好,虽然)。 最佳答案
命令crontab用于维护/管理单个用户的crontab文件。这些文件通常位于/var/spool/cron/crontabs
中。
如果crontab -l
不显示任何cron作业,则此用户当前没有单独的cron作业。这并不意味着/etc/cron*taht中没有cron作业将以该用户的权限运行。crontab
不会对/etc/cron*中的文件进行操作。它是一个工具,仅用于管理/var/spool/cron/crontabs
中保存的单个(每个用户)cron作业。
现在让我们看看如何执行不同的cron作业。
从cron守护进程的manpage中我们可以读取:
cron在其spool区域(/var/spool/cron/crontab)中搜索crontab文件(以/etc/passwd中的帐户命名)。。。
cron还读取/etc/crontab,格式略有不同(参见crontab(5))。
以及:
另外,在Debian中,cron读取/etc/cron.d目录中的文件。cron以与/etc/crontab文件相同的方式处理/etc/cron.d中的文件。。。
(我认为这也适用于gentoo……)
关于重新启动,我们可以阅读:
然后cron每分钟都会醒来,检查所有存储的crontab,检查每个命令,看看它是否应该在当前分钟内运行。。。
此外,cron每分钟检查一次spool目录的modtime(或/etc/crontab文件中的modtime)是否已更改,如果已更改,cron将检查所有crontab文件中的modtime并重新加载已更改的modtime。因此,只要修改了crontab文件,就不必重新启动cron。注意
crontab(1)命令在更改crontab时更新spool目录的modtime。
因此crontab
命令是针对用户特定的玉米作业的,而/etc/cron*
中的文件更多的是针对系统cron作业的。
无需手动触发即可激活新的cron作业。
关于linux - 如何在gentoo Linux系统上处理crontab事件?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23566990/