如何使用Kue每周四安排一次工作?

时间:2013-05-31 22:36:46

标签: node.js jobs kue

使用Kue,如何安排每周四执行一次作业? Kue自述文件提到我可以延迟工作,但是在特定时间重复执行工作呢?

我可以用cron工作做我想做的事,但我喜欢Kue的功能。

我想要的是在周四的任何时间处理一份工作,但只能处理一次。

2 个答案:

答案 0 :(得分:16)

我有一个类似的问题,我基本上想出了以下内容。如果其他人有不同的解决方案,我很乐意看到其他一些想法。

var jobQueue = kue.createQueue();

// Define job processor
jobQueue.process('thursday-jobs', function (job, done) {

  var milisecondsTillThurs = // TODO: Get the time until next thursday.  For this I used moment.js

  // do this job again next Thursday
  jobQueue.create('thursday-jobs').delay(milisecondsTillThurs).save();

  // For Example purpose this job waits then calls done
  setTimeout(function () {
      done();
  }, 10000);


});

// Use some initialization code to check if the job exists yet, and create it otherwise
kue.Job.rangeByType('thursday-jobs','delayed', 0, 10, '', function (err, jobs) {
    if (err) {return handleErr(err);}
    if (!jobs.length) {
        jobQueue.create('thursday-jobs').save();
    }
    // Start checking for delayed jobs.  This defaults to checking every 5 seconds
    jobQueue.promote();
});

Kue文档很少,但来源评论很好且易于阅读

答案 1 :(得分:1)

看看kue-scheduler。我很确定你应该能够做到这样的事情:

var kue = require('kue-scheduler');
var Queue = kue.createQueue();

//create a job instance
var job = Queue
            .createJob('every', data)
            .attempts(3)
            .backoff(backoff)
            .priority('normal');

//schedule it to run every Thursday at 00:00:00 
var thursday = '0 0 0 * * 4';
Queue.every(thursday, job);


//somewhere process your scheduled jobs
Queue.process('every', function(job, done) {
    ...
    done();
});

kue-scheduler docs:https://github.com/lykmapipo/kue-scheduler; 将他们的文档链接到cron的东西:https://github.com/kelektiv/node-cron;