每隔45分钟使用Node-Cron运行Cron作业

我正在使用node-cron来运行预定作业。 我希望这些工作每45分钟运行一次,但是它的performance很奇怪

这是我正在使用的模式

'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分钟运行一次工作。 任何人都可以帮助我的模式? 谢谢 :)

你可能正在寻找

 0 */45 * * * * 

范围在这里 。

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

我比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分钟运行一次,然后调用一个检查当前时间的脚本来决定是否执行任何操作。

类似的方法应该适用于node-cron。 安排函数每15分钟运行一次,并调用一个检查当前时间的函数来决定是否运行。 例如,您可以检查自午夜以来模45的分钟数是否为零。 (如果日程安排不准确,您可能要考虑一个小的变化。)

我不太了解JavaScript以提供编写此函数的最佳方法,但它应该是相当简单的。

您需要编写一个脚本作为包装来决定是否每45分钟执行一次实际的命令。 那是0,45,30(= 45 + 45-60),15(= 30 + 45-60),0(= 15 + 45-60)。 所以,脚本的运行时间为0,15,30,45

命令date +%M可能对shell脚本有帮助。

没有直接的方法来做到这一点。 但是,我们可以通过在目标脚本中使用shell命令拦截计划来获得结果。

首先,每15分钟运行一次脚本:

 */15 * * * * <target_script> 

然后,在target_script中 ,在实际代码之前放置以下代码:

 #!/bin/sh # Exit except at 0:45, 1:30, 2:15, 3:00, 3:45 etc if ! echo "((`date +%-H`*60)+`date +%-M`)/45" | bc -l | grep "\.0*$" &> /dev/null; then exit 1; fi # Your actual code goes here; 

使用cron npm模块这样的东西

 var cronJob = require('cron').CronJob; var job = new cronJob({ cronTime:'0 */45 * * * *', onTick: function(){ var my_date = new Date(); var tomorrow_date = my_date.getFullYear() + "-" + ('0'+(my_date.getMonth()+1)) + "-" + (my_date.getDate()+1) var condition = [{},{$set: {'plannedDeliveryDate' :tomorrow_date +'T00:00:00.000Z'}}] dbQuery.updateMany(orderModel, condition, function(err, result){ if(result.nModified == result.n) console.log(err, result) }) }, start:true, timeZone:'Asia/Kolkata' }); job.start(); 

试试这个,

 0-23/45 * * * *