我刚刚上线了一台新服务器,并按照旧服务器关于 cron 的方式对其进行了配置,但作业没有运行。因此,我仔细检查了配置,并检查了当前的 cron 是否与旧的 cron 一样。是的,看起来是这样!
因为它是一个“systemd”类型的系统,所以我运行了适当的命令来查看它认为的计划,这就是我得到的:
# systemctl list-timers --all
NEXT LEFT LAST PASSED UNIT ACTIVATES
Sun 2020-08-16 15:15:55 PDT 5min left Sun 2020-08-16 14:15:54 PDT 54min ago dnf-makecache.timer dnf-makecache.service
Sun 2020-08-16 20:57:26 PDT 5h 47min left Sat 2020-08-15 20:57:26 PDT 18h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
Mon 2020-08-17 00:00:00 PDT 8h left Mon 2020-08-10 00:00:00 PDT 6 days ago fstrim.timer fstrim.service
Mon 2020-08-17 00:00:00 PDT 8h left Sun 2020-08-16 00:00:01 PDT 15h ago mlocate-updatedb.timer mlocate-updatedb.service
Mon 2020-08-17 00:00:00 PDT 8h left Sun 2020-08-16 00:00:01 PDT 15h ago unbound-anchor.timer unbound-anchor.service
5 timers listed.
这一切都很好,但它没有显示我的具体补充——其中任何一个。所以,我做了我认为正确的事情,我跑了systemctl reload crond.service
,得到了相同的输出。所以我重新启动并仍然得到相同的输出!
我的补充是:
- cron.d: local - 一组不在通常日程安排上的本地事务
- cron.daily:backup.daily logrotate mailbox_check
- cron.monthly; backup.monthly,和;
- cron.weekly; 每周备份
我已经完全准备好相信我在配置中做错了什么,或者也许还有其他问题说明为什么我不认为他们跑了但他们跑了。但是我没有看到systemctl list-timer
s 输出中的其他条目,这些条目是在我开始使用我自己的添加之前就已经安装的软件包放在那里的。
也许问题是我对列表计时器输出不熟悉?难道不应该也显示这些其他工作吗?
与 linux 中的许多事情一样,做事情的方法不止一种。Cron 和 systemd timer 是做类似 cron 的事情的不同方式,就像 upstart 一样,init.d 和 systemd 是 3 个不同的 init 系统。
许多 cron 作业归特定用户所有,因此您可以
crontab -l
作为特定用户,也crontab -u username -l
可以以 root 身份检查另一个用户的 cron 作业。你也有每天,每周每月等等
虽然您可以深入研究每个文件,但它们是一系列文件,因此
所以
ls -la /etc/cron.*
会给你一个概述将这些转换为systemd 计时器脚本超出了此答案的范围,但它们与经典的 cron 作业不同。