Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在查找在作业仍在运行时不会启动的node.js计划程序_Node.js_Scheduled Tasks_Scheduler_Scheduling_Job Scheduling - Fatal编程技术网

正在查找在作业仍在运行时不会启动的node.js计划程序

正在查找在作业仍在运行时不会启动的node.js计划程序,node.js,scheduled-tasks,scheduler,scheduling,job-scheduling,Node.js,Scheduled Tasks,Scheduler,Scheduling,Job Scheduling,我正在为nodejs寻找一个schedular/cron。 但是我需要一个重要的特性——如果作业没有完成(当再次开始的时间到来时),我希望它不要开始/延迟计划。 例如,我需要每5分钟运行一次作业。工作8点开始,但只在8点06分结束。所以我希望8:05的工作要么等到8:06,要么根本不开始,在8:10等待下一个周期。 有这样的包裹吗?如果没有,最好的实现方法是什么?您可以使用该软件包。它允许您手动启动/停止cronjob。这意味着您可以在作业完成时调用这些函数 const CronJob = re

我正在为nodejs寻找一个schedular/cron。 但是我需要一个重要的特性——如果作业没有完成(当再次开始的时间到来时),我希望它不要开始/延迟计划。 例如,我需要每5分钟运行一次作业。工作8点开始,但只在8点06分结束。所以我希望8:05的工作要么等到8:06,要么根本不开始,在8:10等待下一个周期。 有这样的包裹吗?如果没有,最好的实现方法是什么?

您可以使用该软件包。它允许您手动启动/停止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

坦克!在查看了您的解决方案之后,我做了一些不同的事情-在函数的末尾,我调用了一个超时,直到这个日期再加上5分钟。这很好用