CronJob只执行一次

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CronJob只执行一次相关的知识,希望对你有一定的参考价值。

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

我不明白为什么,但我的CronTab只运行一次。它应该每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) + '
Menor Ask: ' + res.MinExchange.Exchange + '--> ' + res.MinExchange.Ask + '
Mayor 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模式是错误的。根据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只执行一次的主要内容,如果未能解决你的问题,请参考以下文章

每分钟运行一次cronjob的风险

UI5 - XML 片段中的格式化程序只执行一次。如何再次运行它们?

UI5 - XML片段中的格式化程序只执行一次。如何再次运行它们?

K8s 离线作业:Job与CronJob

如何安排执行 kubectl 命令的 cronjob?

Kubernetes Cronjob的第一次使用