我有一个gentoo Linux系统和crontab的奇怪行为。作为root
用户,我理解文档,命令
crontab -l
列出为当前用户root
定义的所有crontab作业(没有为任何其他用户定义的cronjobs)。所有列出的cronjobs也在文件/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未执行。
这一切都没有意义,所以我有两个问题:
crontab -l
不列出所有cronjobs?/etc/cron.d
中的cronjobs必须在某处注册,还是需要重新启动守护程序/服务?为什么一个开始,而不是另一个(可执行文件工作正常)。 答案 0 :(得分:1)
命令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在其假脱机区域(/ var / spool / cron / crontabs)中搜索crontab文件(以/ etc / passwd中的帐户命名); ...
cron还会读取/ etc / crontab,其格式略有不同(请参阅crontab(5))。
以及:
此外,在Debian中,cron读取/etc/cron.d目录中的文件。 cron以与/ etc / crontab文件相同的方式处理/etc/cron.d中的文件......
(我认为这也适用于gentoo ......)
关于重新启动,我们可以阅读:
然后cron每分钟醒来,检查所有存储的crontabs,检查每个命令,看它是否应该在当前分钟运行...此外,cron检查每一分钟以查看其假脱机目录的modtime(或/ etc / crontab文件中的modtime)是否已更改,如果有,cron将检查所有crontabs文件的modtime并重新加载那些已经改变的。因此,无论何时修改crontab文件,都不需要重新启动cron。注意 crontab(1)命令在更改crontab时更新假脱机目录的modtime。
因此crontab
命令用于特定于用户的玉米作业,而/etc/cron*
中的文件更多用于系统cron作业。
激活新的cron作业不需要手动触发。