我使用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分钟运行一次作业。有没有人能帮我弄个花样?谢谢:)
发布于 2014-06-23 04:04:43
与node-cron相比,我更熟悉cron,但我已经快速浏览了一下文档。
如果我理解正确的话,node-cron使用的语法与cron使用的语法类似,但有一个额外的“秒”字段。因此,cron作业可能具有以下内容:
# min hour mday month wday command
*/15 * * * * some-command要将some-command安排为每15分钟运行一次,node-cron将使用类似的语法来指定运行时间:
'0 */15 * * * *'(带有指定秒的附加字段),但它执行指定的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我肯定想写一个脚本来生成这个列表。
(这是可行的,因为24小时恰好是45分钟的倍数。您不能以这种方式每35分钟运行一次。)
类似的方法应该适用于node-cron。将函数安排为每15分钟运行一次,并调用一个检查当前时间的函数,以决定是否运行。例如,您可以检查模数为45的午夜以来的分钟数是否为零。(您可能希望在调度不准确的情况下允许较小的差异。)
我对JavaScript的了解还不够深入,无法建议编写此函数的最佳方法,但它应该相当简单。
或者编写32行代码来指定您希望它运行的所有时间。
发布于 2014-06-17 18:01:15
您需要编写一个脚本作为包装器,以决定是否每隔45分钟执行一次实际命令。即0,45,30 (= 45 + 45 - 60),15 (= 30 + 45 - 60),0 (= 15 + 45 -60)。因此,运行脚本的分钟数应为0,15,30,45。
在shell脚本中,命令date +%M可能会有所帮助。
发布于 2018-01-21 18:14:05
我在45秒的间隔内尝试了这个字符串,它工作得很好:
'*/45 * * * * *'https://stackoverflow.com/questions/24260462
复制相似问题