Agenda.JS: Как запланировать событие, начинающееся в X, и повторять его после каждого месяца?

Я хотел бы наметить задачи как это:

  1. запланировать задачу, начиная с 1 ноября
  2. Повторяйте задание каждый месяц после
  3. Я не хочу запускать его прямо в тот момент, когда задание запланировано только на 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?

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

Поскольку решение Джастина работает отлично, я думаю, вы также можете использовать формат cron и указать интервал повторения, например:

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

Я создаю сервисное приложение, в котором «30 дней» не работают. Может быть, каждые 4 недели.

Другие вопросы по тегам