寻找一个node.js调度程序,如果作业仍在运行,它将无法启动

时间:2017-06-22 05:34:32

标签: node.js scheduled-tasks scheduler scheduling job-scheduling

我正在为nodejs寻找一个schedule / cron。 但是我需要一个重要的功能 - 如果工作没有完成(当它再次开始的时候到了),我希望它不能启动/延迟时间表。 例如,我需要每5分钟运行一次工作。工作从8:00开始,但仅在8:06结束。所以我希望8:05的工作要么等到8:06,要么根本不要开始,等待8:10的下一个周期。 有没有这样做的包?如果没有,实现这个的最佳方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以使用cron包。它允许您手动启动/停止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();

答案 1 :(得分:2)

您可以自己实施:

// 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