动态更新nodejs cronjob周期
Posted
技术标签:
【中文标题】动态更新nodejs cronjob周期【英文标题】:Dynamically update nodejs cronjob period 【发布时间】:2016-03-03 18:22:51 【问题描述】:我需要在我的 nodejs 应用程序中定期执行一些任务。如果它是固定的时期,那么它工作正常。但在我的情况下,这个时期应该是动态变化的。下面是我的代码,它没有按我的预期工作。当我更改周期时,这里的 cronjob 没有更新它的周期。
var period = 1;
var CronJob = require('cron').CronJob;
new CronJob('*/' + period + ' * * * * *', function ()
console.log("some task");
, null, true, "Indian/Mauritius");
new CronJob('*/5 * * * * *', function ()
period = period * 2;
console.log("updating cronjob period");
, null, true, "Indian/Mauritius");
【问题讨论】:
【参考方案1】:在这里,您正在创建 2 个将同时运行的 CronJobs。为了“改变”周期,你必须先停止第一个 Cronjob,然后再创建一个新的。
例如(未经测试的代码)
var job;
var period = 1;
var CronJob = require('cron').CronJob;
function createCron(job, newPeriod)
if (job)
job.stop();
job = new CronJob('*/' + newPeriod + ' * * * * *', function ()
console.log("some task");
, null, true, "Indian/Mauritius");
createCron(job, 1);
setTimeout(function()
period = period * 2;
createCron(job, period);
, 60000);
【讨论】:
【参考方案2】:如果你想动态改变时间,你可以通过使用cron作业的CronTime
方法然后调用a.setTime(new CronTime(newCronTime))
来实现。
在下面的示例中,我创建了一个 cron 作为常量 a
,它每 4 秒运行一次,然后我更改时间以使其每秒运行一次。
a.start()
和 a.stop()
函数用于启动和停止调度程序。
const CronJob = require('cron').CronJob
const CronTime = require('cron').CronTime
const a = new CronJob('*/4 * * * * *', function()
run() // function called inside cron
, null, false)
let run = () =>
console.log('function called')
let scheduler = () =>
console.log('CRON JOB STARTED WILL RUN IN EVERY 4 SECOND')
a.start()
let schedulerStop = () =>
a.stop()
console.log('scheduler stopped')
let schedulerStatus = () =>
console.log('cron status ---->>>', a.running)
let changeTime = (input) =>
a.setTime(new CronTime(input))
console.log('changed to every 1 second')
scheduler()
setTimeout(() =>
schedulerStatus()
, 1000)
setTimeout(() =>
schedulerStop()
, 9000)
setTimeout(() =>
schedulerStatus()
, 10000)
setTimeout(() =>
changeTime('* * * * * *')
, 11000)
setTimeout(() =>
scheduler()
, 12000)
setTimeout(() =>
schedulerStop()
, 16000)
【讨论】:
不只是“你也可以试试这个”,您能否指出您的样本与问题有何关联? 嗨@rudolf_franek 我已经使评论更具描述性,现在看看以上是关于动态更新nodejs cronjob周期的主要内容,如果未能解决你的问题,请参考以下文章