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