动态更新nodejs cronjob周期
Dynamically update nodejs cronjob period
我需要在我的 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");
这里您正在创建 2 个 CronJobs,它们都将 运行。为了 "change" 期间,您必须先停止第一个 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);
如果您想动态更改时间,可以使用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)
我需要在我的 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");
这里您正在创建 2 个 CronJobs,它们都将 运行。为了 "change" 期间,您必须先停止第一个 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);
如果您想动态更改时间,可以使用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)