![anacron 如何确定每天、每周和每月运行的作业?](https://linux22.com/image/141395/anacron%20%E5%A6%82%E4%BD%95%E7%A1%AE%E5%AE%9A%E6%AF%8F%E5%A4%A9%E3%80%81%E6%AF%8F%E5%91%A8%E5%92%8C%E6%AF%8F%E6%9C%88%E8%BF%90%E8%A1%8C%E7%9A%84%E4%BD%9C%E4%B8%9A%EF%BC%9F.png)
anacron 如何确定每天、每周和每月运行的作业?
- anacron 将使用上一个作业的哪个时间来决定是否再次运行该作业:上一个作业的开始时间还是完成时间? anacron 仅使用结束时间而 cron 仅关注开始时间是否正确?
每天是否意味着 24 小时,或者只是不同的日历日就可以让每日作业运行?
每周是否意味着正好 7 天,或者只是不同的日历周就可以运行每周作业?
每月是否意味着正好 30 天,或者只是不同的日历月份就可以运行每月的作业?
时间戳文件仅准确到一天,所以我猜每日问题的答案是不同的“日历”日而不是 24 小时?
$ sudo cat /var/spool/anacron/cron.daily 20181101 $ sudo cat /var/spool/anacron/cron.weekly 20181028 $ sudo cat /var/spool/anacron/cron.monthly 20181011
一些例子。假设每日作业今天凌晨 4 点开始运行,而 anacron 只会在明天早上 6 点运行一次。
如果作业在今天上午 11 点运行完毕,anacron 将使用哪个时间来决定是否运行作业:开始时间还是结束时间?
如果作业在今天凌晨 5 点完成运行,anacron 会决定在那时运行它吗?
如果作业在明天凌晨 3 点完成运行,anacron 会决定在那时运行它吗?
谢谢。
答案1
如果作业未在定义的时间段内运行,anacron 将运行该作业。因此,如果定义为每 7 天运行一次的作业在过去 7 天内未运行,则该作业将运行。 anacron 仅通过查看日历天数来计算:它加载上次运行的时间戳,计算当前的“天数”,然后将两者相减。
anacron 在作业执行后更新时间戳,因此它使用完成日期作为相应作业不应再次运行的时间段的开始时间。 cron 仅将当前日期和时间与给定的开始说明符进行比较,所以是的,它只考虑开始时间。
每日意味着上次运行作业的时间必须是昨天或更早。每周意味着上次运行作业的时间必须是 7 天前或更早。每月有点不同;这意味着上次运行作业的时间必须是n几天前或更早,在哪里n是上个月的天数,当经过的天数恰好等于当月的天数时,会绕过。
鉴于你的例子:
- 今天上午 11 点或上午 5 点完成的日常作业将在明天再次运行;
- 明天凌晨 3 点完成的每日作业将在后天再次运行。