使用Node-Cron每45分钟运行一次Cron Job

T. *_*Rex 20 cron node.js

我正在使用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)

范围在这里.

  • 秒:0-59
  • 分钟:0-59
  • 营业时间:0-23
  • 每月的一天:1-31
  • 月份:0-11
  • 星期几:0-6

  • 这不是"每45分钟",而是"每小时45". (9认同)
  • @elimence:考虑接受你实际提出的问题的答案是否更公平,而不是那个与你非常明确地说*不符合你的要求的问题中的字符串相匹配的答案.改变你对你想做的事情的想法是没有错的,但我们并不介意读者.(顺便说一句,每30分钟运行一次命令是否符合你修改后的要求?) (4认同)

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行来指定您希望它运行的所有时间.