gpt4 book ai didi

cron - CRON 的触发速度有多快?

转载 作者:行者123 更新时间:2023-12-02 18:09:04 26 4
gpt4 key购买 nike

第一个示例

假设我有一份 CRON 工作

 30 2 * * * ....

然后每次晚上 2:30(本地时间)都会运行。

现在假设我的时区是欧洲/德国,并且是 2017 年 10 月 29 日(夏令时切换的那一天)。那么这个 CRON 作业会运行两次,对吗?

第二个示例

假设我有时区欧洲/德国和 CRON 作业

 30 11 * * * ....

由于德国从未在 11:30 更改夏令时,因此这不会造成干扰。但用户可以更改本地时间。非常清楚:这个问题与 DST 无关

对于以下测试用例,我想知道是否/多久安排一次 CRON 作业:

  1. 在 11:29:58.0,用户将时间设置为 11:31:00
  2. 在 11:29:59.1,用户将时间设置为 11:31:00
  3. 在 11:29:59.6,用户将时间设置为 11:31:00
  4. 在 11:30:01.0,用户将时间设置为 11:29:59.7 - 随后是否直接执行 CRON?

它们归结为CRON 触发的速度有多快?,其中第四个也有一个问题:CRON 是否存储它在那一分钟已经执行过。

同一问题的另一个变体:

  • 在 11:29:59,NTP 服务将时间修正为 11:31:00 - 该作业会在当天执行吗?
  • 最佳答案

    自信地回答这个问题的最简单方法是查看 cron 守护程序的源代码。网上有几个版本如this ,或者您可以使用apt-get source cron .

    cron 中的滴答周期是重复休眠一分钟,或者如果有作业即将到来,则休眠更短时间。从 sleep 中醒来后,它会立即检查时间并将结果视为 wakeupKind 之一。值:

    • 预期时间 - 运行我们预期的任何作业
    • 小幅前进(最多 5 分钟)- 在中间的几分钟内运行作业
    • 中速前进(最多 3 小时,因此这包括从 Spring 开始的 DST)- 首先运行任何通配符作业(因为 catch 可能需要一分钟以上),然后 catch 中间的固定时间作业
    • 大幅跳跃(任一方式 3 小时或更长时间)- 从当前时间开始
    • 向后跳转(最多 3 小时,因此包括夏令时结束) - 因为任何固定时间作业“可能”已经运行,所以仅运行任何通配符作业,直到时间再次 catch

    如果有疑问,来源评论这些 wakeupKind values清楚。

    <小时/>

    编辑

    跟进是否 sleep()可能会受到时钟变化的影响,看起来答案间接地存在于几个 Linux 手册页中。

    • 首先是 sleep() function 的注释确认是由 nanosleep() 实现的
    • nanosleep() 的注释假设 Linux 使用 CLOCK_MONOTONIC 来测量时间时钟(尽管 POSIX.1 说不应该)
    • 在文档中向下滚动一下 clock_settime()参见CLOCK_MONOTONIC的解释,这说明它不受系统时间跳跃的影响,但会受到增量 NTP 样式时钟同步调整的影响。

    总之,系统管理员风格的时钟更改不会对 sleep() 产生任何影响。 。但例如,如果 NTP 调整进来并说“轻轻地”提前时钟,cron 将经历一系列略短的 sleep()函数调用。

    关于cron - CRON 的触发速度有多快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52354269/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com