我想安排这样的任务:

  • 安排从11月1日开始的任务
  • 每月在
  • 之后重复执行该任务
  • 我不想在计划任务仅在11月1日开始的那一刻正确运行它。

  • 我正在使用Agenda.js,并且需要确保正确执行此操作,尤其是Point3。它无法在计划的时间运行。

    这就是我的想法:
    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月1日以后每月运行?

    最佳答案

    这也是在他们的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

    09-28 08:02