正在寻找一个 node.js 调度程序,如果作业仍在 运行 则它不会启动
looking for a node.js scheduler that wont start if the job is still running
我正在寻找 nodejs 的计划/cron。
但我需要一个重要的功能——如果工作没有完成(当它再次开始的时间到了),我希望它不开始/延迟时间表。
例如,我需要每 5 分钟 运行 一份工作。作业开始于 8:00,但仅在 8:06 结束。所以我希望 8:05 的工作要么等到 8:06,要么根本不开始,并在 8:10 等待下一个周期。
有没有这样做的包?如果没有,实现它的最佳方法是什么?
您可以使用 cron 包。它允许您手动 start/stop cronjob。这意味着您可以在 cronjob 完成时调用这些函数。
const CronJob = require('cron').CronJob;
let job;
// The function you are running
const someFunction = () => {
job.stop();
doSomething(() => {
// When you are done
job.start();
})
};
// Create new cronjob
job = new CronJob({
cronTime: '00 00 1 * * *',
onTick: someFunction,
start: false,
timeZone: 'America/Los_Angeles'
});
// Auto start your cronjob
job.start();
可以自己实现:
// The job has to have a method to inform about completion
function myJob(input, callback) {
setTimeout(callback, 10 * 60 * 1000); // It will complete in 10 minutes
}
// Scheduler
let jobIsRunning = false;
function scheduler() {
// Do nothing if job is still running
if (jobIsRunning) {
return;
}
// Mark the job as running
jobIsRunning = true;
myJob('some input', () => {
// Mark the job as completed
jobIsRunning = false;
});
}
setInterval(scheduler, 5 * 60 * 1000); // Run scheduler every 5 minutes
我正在寻找 nodejs 的计划/cron。 但我需要一个重要的功能——如果工作没有完成(当它再次开始的时间到了),我希望它不开始/延迟时间表。 例如,我需要每 5 分钟 运行 一份工作。作业开始于 8:00,但仅在 8:06 结束。所以我希望 8:05 的工作要么等到 8:06,要么根本不开始,并在 8:10 等待下一个周期。 有没有这样做的包?如果没有,实现它的最佳方法是什么?
您可以使用 cron 包。它允许您手动 start/stop cronjob。这意味着您可以在 cronjob 完成时调用这些函数。
const CronJob = require('cron').CronJob;
let job;
// The function you are running
const someFunction = () => {
job.stop();
doSomething(() => {
// When you are done
job.start();
})
};
// Create new cronjob
job = new CronJob({
cronTime: '00 00 1 * * *',
onTick: someFunction,
start: false,
timeZone: 'America/Los_Angeles'
});
// Auto start your cronjob
job.start();
可以自己实现:
// The job has to have a method to inform about completion
function myJob(input, callback) {
setTimeout(callback, 10 * 60 * 1000); // It will complete in 10 minutes
}
// Scheduler
let jobIsRunning = false;
function scheduler() {
// Do nothing if job is still running
if (jobIsRunning) {
return;
}
// Mark the job as running
jobIsRunning = true;
myJob('some input', () => {
// Mark the job as completed
jobIsRunning = false;
});
}
setInterval(scheduler, 5 * 60 * 1000); // Run scheduler every 5 minutes