当我要求此应用程序每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,22
“). Steps are also permitted after an
asterisk,just use “*/2
“.
这里所指的“范围”是在/之前给出的范围,它是特定字段的时间范围的子范围.第一个字段指定一小时内的分钟,因此* / …指定范围从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,并在指定时间运行相同的命令.