5

我想在某些条件下停止节点 cron 作业。

这就是我开始每 1 秒运行一次任务的方式。

const runScheduler = (url)=>{
    cron.schedule('*/1 * * * * *', () => {
        console.log('running a task every one second');
        async.waterfall([ getUrlDelay(url), dbMethods.updateUrlResponses(url) ],function(err, success){
            if(err) return console.log('Url Not Found');
        })
      });
}

我想停止这项工作,但无法完成。

4

4 回答 4

15

由于对这些软件包所做的更改,以下答案现在可能不相关。这scheduleJob本来是一个伪代码来创建一个工作。目的是展示如何阻止他们。


这是为三个 cron 模块( cronnode-cronnode-schedule )实例化、启动和停止调度的 cron 作业的综合摘要:

1. CRON

为了cancel工作,您可以创建一个具有唯一名称的工作。

var cron = require('cron').CronJob;

var j = cron.scheduleJob(unique_name, '*/1 * * * * *',()=>{
    //Do some work
});
// for some condition in some code
let my_job = cron.scheduledJobs[unique_name];
my_job.stop();

它应该取消作业。

2.节点-CRON

var cron = require('node-cron');

const url_taskMap = {};
const task = cron.schedule('*/1 * * * * *',()=>{
    //Foo the bar..
});
url_taskMap[url] = task;
// for some condition in some code
let my_job = url_taskMap[url];
my_job.stop();

3. 节点调度

var schedule = require('node-schedule');

let uniqueJobName = specificURL;
// Shedule job according to timed according to cron expression
var job = schedule.scheduleJob(uniqueJobName,'*/10 * * * * *', function(){
     //Bar the foo..
});
// Inspect the job object (i.E.: job.name etc.)
console.log(`************** JOB: ******************`);
console.log(job);

// To cancel the job on a certain condition (uniqueJobName must be known) 
if (<someCondition>) {
    let current_job = schedule.scheduledJobs[uniqueJobName];
    current_job.cancel();
}

Aritra ChakrabortyILuvLogix总结

于 2018-12-08T17:03:57.057 回答
0
var cron = require('node-cron');

  var task = cron.schedule('* * * * *', () =>  {
    console.log('will execute every minute until stopped');
});
task.stop(); 
于 2018-12-08T16:57:17.503 回答
0

我成功地使用cron-job-manager创建、读取、更新、删除作业。

添加作业后,manager.add('key','* 30 * * * *', taskFunction) 您可以轻松停止manager.stop('key')或删除它manager.deleteJob('key')

于 2020-04-01T11:43:07.637 回答
0

我遇到了同样的问题。使用自定义每个作业node-schedule解决了这个问题:ID

启动自定义作业:

  const campaignId = "MY_CUSTOM_ID"
  let job = schedule.scheduleJob(campaignId, '* * * * * *', function () {
    console.log('running campaign: ' + campaignId)
  })

停止自定义作业:

  const campaignId = "MY_CUSTOM_ID"
  let current_job = schedule.scheduledJobs[campaignId]
  current_job.cancel()
于 2020-09-16T00:27:02.693 回答