unix – Cron“步骤”如何运作?
我遇到的情况是,我认为每55分钟运行一次的cron工作实际上是在小时后55分钟和最高时间运行.实际上,它不是一个cron工作,但它是一个使用cron语法的
PHP scheduling application.
当我要求此应用程序每55分钟安排一个作业时,它会创建一个如下所示的crontab行. */55 * * * * 此crontab行最终不会每55分钟运行一次作业.相反,工作在工作时间后的55分钟和最高时间运行.我不希望这样.我通过cron tester运行它,它验证了不良行为是正确的cron行为. 这导致我查找/实际意味着什么.当我看到cron manual时,我学会了斜线表示“步骤”,但手册本身有点模糊,这意味着
手册的描述(“指定通过范围跳过数字的值”)有点模糊,“每两小时”的例子有点误导(这可能导致应用程序中的错误) 那么,有两个问题: > unix cron程序如何使用“步骤”信息(斜杠后的数字)来决定是否应该跳过运行作业? (模块划分?如果是这样,关于什么?决定“真正”运行的条件是什么,哪些决定不是?或者是其他什么?)
这里所指的“范围”是在/之前给出的范围,它是特定字段的时间范围的子范围.第一个字段指定一小时内的分钟,因此* / …指定范围从0到59. * / 55的第一个字段指定所有分钟(在0-55范围内)是55的倍数 – 即,每小时后0和55分钟. 类似地,第二个(小时)字段中的0-23 / 2或* / 2指定所有小时数(在0-23范围内)是2的倍数. 如果指定的范围从0开始,则/后面的数字(比如N)指定从范围的下限开始的每N分钟/小时/等.例如,第二个字段中的3-23 / 7表示从03:00(03:00,10:00,17:00)开始的每7小时. 当你想要的间隔恰好分成下一个更高的时间单位时,这种方法效果最好.例如,您可以轻松指定每1,3,5,15,20或30分钟或每1,6或12个事件发生的事件小时. (感谢巴比伦人选择有这么多优秀除数的时间单位.) 不幸的是,cron在超过一小时的时间范围内没有“每55分钟”的概念. 如果你想每55分钟(比如00:00,0:55,01:50,02:45等)开始工作,你必须间接地去做.一种方法是安排脚本每5分钟运行一次;然后脚本检查当前时间,并且每调用一次它的工作只执行一次. 或者您可以在crontab文件中使用多行来在00:00,00:55,01:50等处运行相同的作业 – 除了一天不是55分钟的倍数.如果您不介意每天,每周或每月更长或更短的间隔,您可以编写一个程序来生成一个包含所需数量的大型crontab,并在指定时间运行相同的命令. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |