【问题标题】:CronJob executing only onceCronJob 只执行一次
【发布时间】:2018-03-01 18:54:11
【问题描述】:

我正在为 NodeJS 使用 CronJob https://github.com/kelektiv/node-cron

我不明白为什么,但我的 CronJob 只运行了一次。它应该每 10 秒运行一次,但在第一次运行后它不会重新启动。

async function Job(moneda, condicion) {
console.log('init');
        var res = await Analyzer.GetSpread(moneda);
        var spread = res.MaxExchange.Bid/res.MinExchange.Ask;
        console.log('Spread: ' + spread + 'Moneda: ' + moneda);
        if (await condicion.CumpleCondicion(spread)){
                var ids = await db.GetSuscripciones();
                var mensaje = 'Spread: ' + spread.toFixed(3) + '\nMenor Ask: ' + res.MinExchange.Exchange + '--> ' + res.MinExchange.Ask + '\nMayor Bid: ' + res.MaxExchange.Exchange + '--> ' + res.MaxExchange.Bid;
                for (var i = 0, len = ids.length; i < len; i++) {
                        bot.SendAlert(ids[i].id,mensaje);
                }
        }
console.log('end');  //this is reached
}



exports.Start = function(value){
        condicionBTC = new condicionState('btc');
        new CronJob('*/10 * * * * *', Job('btc',condicionBTC), null, true, 'America/Los_Angeles');
}

这在控制台中打印(仅一次)

init
Spread: 1.007141110114658 Moneda: btc
cumple condicion 1.007141110114658
end

如果有一些异常停止了 cron 作业,我应该在哪里捕获它以便我可以看到发生了什么?

我已经添加了这个

var job = new CronJob('*/10 * * * * *', Job('btc',condicionBTC), null, true, 'America/Los_Angeles');
setInterval(function(){ console.log(job.running); }, 3000);

并保持打印真实

【问题讨论】:

  • Cron 只允许至少一分钟(参见:askubuntu.com/a/802)。
  • 我正在使用github.com/kelektiv/node-cron,它允许每秒最多运行 1 次
  • 你能用 onTick: function() { console.log('job ticked'); } 内部作业配置,即新的 CronJob 以检查您的作业是否正在运行?
  • 我添加了setInterval(function(){ console.log(job.running); }, 3000);,每次都打印为true

标签: node.js cron


【解决方案1】:

您的 cron 模式是错误的。根据https://github.com/kelektiv/node-cron: “这个库有六个字段,以1秒为最细粒度。”

  • 秒:0-59
  • 分钟:0-59
  • 小时:0-23
  • 月份日期:1-31
  • 月份:0-11(1-12 月)
  • 星期几:0-6(周日至周六)

所以你的 cron 模式试图每 10 秒运行一次,这是不可能的。

尝试用 '10 * * * * *' 替换你的 cron 模式

【讨论】:

  • 每分钟运行一次,我不想实现。这种模式曾经有效,我开始怀疑该函数的参数是否破坏了 CronJob。
  • @B.米尔福德,您建议的模式将在每分钟的第 10 秒执行,但操作需要每 10 秒执行一次,因此问题中的模式是正确的。
  • @krish 你是对的。我错了。这里的工作示例:runkit.com/5a9852edcccf570012d51b2b/5a98531da4606a001219e779
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 2016-04-29
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
相关资源
最近更新 更多