如何停止节点 cron 作业

Roh*_*han 2 node.js node-cron

我想在某些条件下停止节点 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');
        })
      });
}
Run Code Online (Sandbox Code Playgroud)

我想停止这项工作,但无法做到。

Ari*_*rty 11

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


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

1. 克朗

为了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();
Run Code Online (Sandbox Code Playgroud)

它应该取消作业。

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();
Run Code Online (Sandbox Code Playgroud)

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();
}
Run Code Online (Sandbox Code Playgroud)

Aritra ChakrabortyILuvLogix总结

  • 一些方法签名似乎不正确。require('cron').CronJob 没有方法“scheduleJob”, require('node-cron') 也没有 (3认同)

amo*_*uri 1

var\xc2\xa0cron\xc2\xa0=\xc2\xa0require('node-cron');\n\n  var\xc2\xa0task\xc2\xa0=\xc2\xa0cron.schedule('*\xc2\xa0*\xc2\xa0*\xc2\xa0*\xc2\xa0*',\xc2\xa0()\xc2\xa0=>\xc2\xa0\xc2\xa0{\n\xc2\xa0   console.log('will\xc2\xa0execute\xc2\xa0every\xc2\xa0minute\xc2\xa0until\xc2\xa0stopped');\n});\ntask.stop(); \n
Run Code Online (Sandbox Code Playgroud)\n