当一个 cron 作业执行时,已经有一个 cron 运行,它们是否同时 运行?

When a cron job is executed and there is already a cron running, are they running simultaneously?

我的问题可能看起来有点奇怪,但我会尝试解释一下,我有一个执行函数的 cron 作业,在这个函数内部有一个循环执行其他函数,这个 cron 每 1 分钟调用一次,所以到目前为止这么好。问题是cron调用的这个函数因为循环需要超过1分钟才能完成,当下一分钟cron 运行s时,它会再次调用这个函数并且它会取消之前的任务或者它会运行 同时?不知道能不能解释清楚

 /*---------- Cron ----------*/
cron.schedule('*/60 * * * * *', async () => {
  this.analyze();

  // this function takes about 2-3 minutes to finish the loop.
})

是的。 CRON 只是一个调度程序。不管怎样,它都会运行根据时间表执行命令。

有很多方法可以防止出现多个 运行,但这些方法需要手动实施。

很多人已经这样做了 https://github.com/kelektiv/node-cron/issues/347

我有一些示例代码(未测试),希望您能从中得到一些启发:

var counter =0
var counterArray = []

async function asyncAnalyze(){
           
         counter = counter+1
         counterArray.push(counter)

for(let i=0;i<counterArray.length;i++){
    const eachResult = await analyze();
console.log(‘Counter: ’, i, ‘ Result: ’, eachResult)
counter = counter - 1       
}
return ;
}

cron.schedule('*/60 * * * * *', async () => {
      this.asyncAnalyze()
})

async function analyze(){ }