Пользователь создал расписание каждые X часов с момента запуска - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь написать диссон-бота в разногласиях. js, который позволяет пользователю планировать выплаты каждые X (1-730) часов с заданного начального часа дня (0-23). Я хотел использовать время cron через расписание узлов, но что, если бы пользователь хотел что-то вроде каждые 77 часов?

В настоящее время объект, который я сохраняю из команд в БД, выглядит так:

const jobParams = { name: 'Job Title', currencyName: 'Credits', interval: '77', amount: '30', startHour: 5, member: '119351283999047682', role: null };

Конечной целью здесь является создание системы, которая будет планировать задание при запуске, чтобы предоставить предоставленному члену 30 «кредитов» каждые 77 часов (каждые 3 дня 5 часов) с отсчетом со следующего 0500. Платежная транзакция готова к go.

Пользователям также нужно будет иметь возможность отменить работу по требованию.

Ответы [ 2 ]

1 голос
/ 16 января 2020

Вы можете использовать шаги в cron раз. */77 аналогично «каждому 77-му». Используя эту концепцию, вы можете запускать задание cron, которое будет запускаться каждый 77-й час, через другое задание, которое запускается в следующие 5 часов утра (только один раз).

const { CronJob } = require('cron');
const foo = () => console.log('Hello, world!');

const job = new CronJob('0 */77 * * *', foo);
new CronJob('0 5 * * *', () => {
  job.start();
  this.stop();
}, null, true);

В качестве альтернативы вы можете иметь задание cron запускается каждые 5 часов утра и устанавливает тайм-аут для выполнения вашего кода через 77 часов.

const job = new CronJob('0 5 * * *', () => setTimeout(foo, 1000 * 60 * 60 * 77), null, true);
0 голосов
/ 16 января 2020

Вы можете попробовать использовать node-schdule https://www.npmjs.com/package/node-schedule

Я не использовал его лично, но кажется, что вы можете запланировать некоторый обратный вызов по прошествии определенного периода времени.

Из примера на странице

var schedule = require('node-schedule');

var j = schedule.scheduleJob('42 * * * *', function(){
  console.log('The answer to life, the universe, and everything!');
});

Затем вы можете построить некоторый API вокруг планировщика для создания / уничтожения расписаний.

...