gpt4 book ai didi

unix - Cron "Steps"是如何工作的?

转载 作者:行者123 更新时间:2023-12-03 23:33:45 26 4
gpt4 key购买 nike

我遇到了这样一种情况,我认为每 55 分钟运行一次的 cron 作业实际上是在下类后 55 分钟运行 在小时的顶部。实际上,这不是 cron 作业,而是 PHP scheduling application使用 cron 语法。

当我要求此应用程序每 55 分钟安排一次作业时,它会创建一个 crontab 行,如下所示。

*/55 * * * *

此 crontab 行结束 不是 每 55 分钟运行一次作业。而是在下类后 55 分钟和整点运行作业。我不希望这样。我已经通过 cron tester 运行了这个,并且它验证不希望的行为是正确的 cron 行为。

这导致我查找 /实际上的意思。当我查看 cron manual我知道斜线表示“步骤”,但手册本身有点模糊,这意味着

Step values can be used in conjunction with ranges. Following a range with "<number>" specifies skips of the number's value through the range. For example, "0-23/2" can be used in the hours field to specify command execution every other hour (the alternative in the V7 standard is "0,2,4,6,8,10,12,14,16,18,20,22"). Steps are also permitted after an asterisk, so if you want to say "every two hours", just use "*/2".



手册的描述(“指定跳过范围内的数字值”)有点模糊,“每两个小时”的例子有点误导(这可能是导致应用程序中的错误的原因)

所以,两个问题:
  • unix cron 程序如何使用“步骤”信息(斜线后的数字)来决定是否应该跳过运行作业? (模块化划分?如果是,基于什么?在什么条件下决定“真正”运行,哪些决定不是?或者是别的什么?)
  • 是否可以将 unix cron 作业配置为每“N”分钟运行一次?
  • 最佳答案

    Step values can be used in conjunction with ranges. Following a range with "<number>" specifies skips of the number's value through the range. For example, "0-23/2" can be used in the hours field to specify command execution every other hour (the alternative in the V7 standard is "0,2,4,6,8,10,12,14,16,18,20,22"). Steps are also permitted after an asterisk, so if you want to say "every two hours", just use "*/2".



    这里所指的“范围”是 /之前给出的范围。 ,它是特定字段的时间范围的子范围。第一个字段指定一小时内的分钟数,因此 */...指定范围从 0 到 59。 */55 的第一个字段指定所有为 55 倍数的分钟(在 0-55 范围内),即每小时后的 0 和 55 分钟。

    同样, 0-23/2*/2在第二个(小时)字段中指定为 2 的倍数的所有小时(在 0-23 范围内)。

    如果您指定的范围不是从 0 开始, / 之后的数字(例如 N )指定每个 第N个从范围的下限开始的分钟/小时/等。例如, 3-23/7在第二个字段中表示从 03:00(03:00、10:00、17:00)开始每 7 小时一次。

    当您想要的时间间隔恰好均匀地划分为下一个更高的时间单位时,这种方法效果最好。例如,您可以轻松指定每 1、2、3、4、5、6、10、12、15、20 或 30 分钟或每 1、2、3、4、6 或 12 分钟发生一次的事件小时。 (感谢巴比伦人选择了有这么多漂亮除数的时间单位。)

    不幸的是,cron 在超过一个小时的时间范围内没有“每 55 分钟”的概念。

    如果您想每 55 分钟运行一次作业(例如,在 00:00、00:55、01:50、02:45 等),则必须间接执行。一种方法是安排脚本每 5 分钟运行一次;该脚本然后检查当前时间,并且每 11 次调用它就执行一次它的工作。

    或者,您可以在 crontab 文件中使用多行在 00:00、00:55、01:50 等运行相同的作业——除了一天不是 55 分钟的倍数。如果您不介意一天、一周或一个月的时间间隔更长或更短,您可以编写一个程序来生成一个包含所需数量的条目的大型 crontab,所有条目都在指定时间运行相同的命令。

    关于unix - Cron "Steps"是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27412483/

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