使用Kue,如何安排每周四执行一次作业? Kue自述文件提到我可以延迟工作,但是在特定时间重复执行工作呢?
我可以用cron工作做我想做的事,但我喜欢Kue的功能。
我想要的是在周四的任何时间处理一份工作,但只能处理一次。
答案 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;