首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Node-Cron每45分钟运行一次Cron作业

使用Node-Cron每45分钟运行一次Cron作业
EN

Stack Overflow用户
提问于 2014-06-17 17:40:48
回答 7查看 52.6K关注 0票数 24

我使用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分钟运行一次作业。有没有人能帮我弄个花样?谢谢:)

EN

回答 7

Stack Overflow用户

发布于 2014-06-23 04:04:43

node-cron相比,我更熟悉cron,但我已经快速浏览了一下文档。

如果我理解正确的话,node-cron使用的语法与cron使用的语法类似,但有一个额外的“秒”字段。因此,cron作业可能具有以下内容:

代码语言:javascript
复制
# min hour mday month wday command
*/15  *    *    *     *    some-command

要将some-command安排为每15分钟运行一次,node-cron将使用类似的语法来指定运行时间:

代码语言:javascript
复制
'0 */15 * * * *'

(带有指定秒的附加字段),但它执行指定的JavaScript函数,而不是外部命令。

在标准cron中,没有指定每45分钟运行一次作业的语法。0/45 * * * *的规范将每小时运行一次作业两次,运行时间分别为0和45分钟。要每45分钟(在00:00,00:45,01:30,02: 15,...,即每天32次)运行一次作业,您必须将其安排为每15分钟运行一次,然后调用一个脚本来检查当前时间,以决定是否执行任何操作。

或者,您可以编写一个详尽的列表,列出您希望作业运行的所有时间:

代码语言:javascript
复制
 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行代码来指定您希望它运行的所有时间。

票数 21
EN

Stack Overflow用户

发布于 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可能会有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-01-21 18:14:05

我在45秒的间隔内尝试了这个字符串,它工作得很好:

代码语言:javascript
复制
'*/45 * * * * *'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24260462

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档