4

我想安排这样的任务:

  1. 安排从 11 月 1 日开始的任务
  2. 之后每个月重复该任务
  3. 我不想在计划仅从 11 月 1 日开始的任务时立即运行它。

我正在使用Agenda.js,我需要确保我正确地执行此操作,尤其是第 3 点。它在计划的那一刻无法运行。

这就是我的想法:

const Agenda = require('agenda');
const agenda = new Agenda({db: { address:'mongodb://127.0.0.1/agenda' } });

agenda.define('task', (job, done) => {
    console.log('The task is running', job.attrs.hello);
    done();
});


agenda.run(() => {
   var event = agenda.create('task', { hello: 'world' })
   event.schedule(new Date('2017-11-01'));
   event.repeatEvery('1 month'); // Will this run every month from now or after 2017-11-01?
   agenda.start();
})

但是,我不确定这条线的行为如何:

event.repeatEvery('1 month'); 

问题:从现在开始还是在 2017-11-01 之后每个月运行一次?

4

3 回答 3

3

这也是在他们的 github 上提出的一个常见问题。从我在这里找到的[议程问题 758][1]。您所要做的就是在计划调用结束时附加调用repeatEvery。

所以你的例子来自:

agenda.run(() => {
   var event = agenda.create('task', { hello: 'world' })
   event.schedule(new Date('2017-11-01'));
   event.repeatEvery('1 month'); // Will this run every month from now or after 2017-11-01?
   agenda.start();
})

至:

agenda.run(() => {
   var event = agenda.create('task', { hello: 'world' })
   event.schedule(new Date('2017-11-01')).repeatEvery('1 month'); 
   agenda.start();
})

回复晚了,但我回答了,因为我发现这个答案很难找到。[1]:https ://github.com/agenda/agenda/issues/758

于 2019-08-14T15:06:17.107 回答
0

由于贾斯汀的解决方案完美运行,我认为您也可以使用 cron 格式并指定重复间隔,例如:

agenda.run(() => {
  var event = agenda.create('task', { hello: 'world' })
  event.schedule(new Date('2017-11-01')).repeatEvery('0 0 1 * *'); 
  agenda.start();
})
于 2020-01-07T00:37:13.030 回答
-1

我正在构建一个“30 天”不起作用的基于服务的应用程序。也许每 4 周一次。

于 2021-06-29T01:14:47.733 回答