我正在使用node-cron来运行预定作业.我希望这些工作每45分钟运行一次,但它的表现很奇怪
这是我正在使用的模式
'00 */45 * * * *'
我开始编写脚本
Tue Jun 17 2014 08:17:39 GMT+0000 (GMT)
这是工作执行的前几次
1. Tue Jun 17 2014 08:45:03 GMT+0000 (GMT)
2. Tue Jun 17 2014 09:00:01 GMT+0000 (GMT)
3. Tue Jun 17 2014 09:45:02 GMT+0000 (GMT)
这绝对不是我的预期或想要的.我想要的只是每45分钟运行一次.任何人都可以帮我解决这个模式吗?谢谢 :)
Ben*_*une 42
你可能正在寻找
0 */45 * * * *
Run Code Online (Sandbox Code Playgroud)
范围在这里.
Kei*_*son 15
我对cron比对node-cron更熟悉,但我已经快速浏览了一下文档.
如果我理解正确的话,node-cron使用类似于cron使用的语法,但带有额外的"秒"字段.那么一个cron工作可能有:
# min hour mday month wday command
*/15 * * * * some-command
Run Code Online (Sandbox Code Playgroud)
为了安排some-command每15分钟运行一次,node-cron将使用类似的语法来指定运行时间:
'0 */15 * * * *'
Run Code Online (Sandbox Code Playgroud)
(使用附加字段指定秒数),但它执行指定的JavaScript函数,而不是外部命令.
在标准cron中,没有语法指定每45分钟运行一个作业.规范0/45 * * * *将在每小时运行一次作业,在小时后0和45分钟.要每45分钟(00:00,00:45,01:30,02:15,...,即每天32次)开始工作,你必须安排它每15分钟运行一次,然后调用一个脚本来检查当前时间以决定是否做任何事情.
或者,您可以编写一份详尽的列表,列出您希望作业运行的所有时间:
0 0 * * * some-command
45 0 * * * some_command
30 1 * * * some_command
15 2 * * * some_command
# 28 lines omitted
Run Code Online (Sandbox Code Playgroud)
我肯定想写一个脚本来生成这个列表.
(这是可行的,因为24小时恰好是45分钟的倍数.你不能以这种方式每隔35分钟运行一次.)
类似的方法应该适用于node-cron.安排函数每15分钟运行一次,并调用一个函数来检查当前时间以决定是否运行.例如,您可以检查自模数45午夜以来的分钟数是否为零.(如果调度不准确,您可能希望允许小的差异.)
我不太了解JavaScript以建议编写此函数的最佳方法,但它应该相当简单.
或者写28行来指定您希望它运行的所有时间.