Как мне запустить cron-like задание в определенное время в будущем, используя Agenda в Nodejs

У меня есть проблема здесь. Как запустить задание в определенное время в будущем, используя Agenda, как это делает планировщик узлов. Основанный на https://www.npmjs.com/package/node-schedule, узел-расписание имеет метод планирования в стиле cron. Так что мне легче извлечь дату из моего ввода. Я прочитал документацию по повестке дня https://github.com/rschmukler/agenda, там говорится, что программа Agenda использует Human Interval для указания интервалов.

Cron

Как я могу это сделать?

2 ответа

Решение

Если у вас есть будущая дата, вы можете преобразовать ее в число days с сегодняшнего дня или даже число seconds как показано ниже, а затем использовать то же самое с agenda хрон работа

function findDaysDifference ( date1, date2 ) {
  //Get 1 day in milliseconds
  var oneDay_ms = 1000 * 60 * 60 * 24;

  // Convert both dates to milliseconds
  var date1_ms = date1.getTime();
  var date2_ms = date2.getTime();

  // Calculate the difference in milliseconds
  var difference_ms = date2_ms - date1_ms;
    
  // Convert back to days and return
  return Math.round(difference_ms/oneDay_ms); 
}

var futureDate = new Date(2018, 0, 1);
var daysFromNow = findDaysDifference(new Date(), futureDate);

console.log(daysFromNow);

Затем создайте agenda работа и график с daysFromNow рассчитано выше,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(daysFromNow + ' days', 'sayHello');

Если вы хотите запланировать это на определенное время в будущем, вы можете рассчитать секунды, как показано ниже,

function findSecondsDifference ( date1, date2 ) { 
      var oneSecond_ms = 1000;
  
      // Convert both dates to milliseconds
      var date1_ms = date1.getTime();
      var date2_ms = date2.getTime();

      // Calculate the difference in milliseconds
      var difference_ms = date2_ms - date1_ms;
        
      // Convert back to days and return
      return Math.round(difference_ms/oneSecond_ms); 
    }

    var futureDate = new Date(2018, 0, 1, 16);
    var secsFromNow = findSecondsDifference(new Date(), futureDate);

    console.log(secsFromNow);

Затем создайте agenda работа и график с secsFromNow рассчитано выше,

agenda.define('sayHello', function(job) {
  console.log("Hello!");
});

// Schedule a job to run once at a given time
agenda.schedule(secsFromNow + ' seconds', 'sayHello');

С повесткой дня.js

interval может быть строкой в ​​удобочитаемом формате, строкой в ​​формате cron или числом.

это означает, что он поддерживает метод планирования в стиле cron .

Например

вы можете запланировать выполнение задания на 3 минуты с текущего времени

        await agenda.schedule('3 minutes', 'send confirmation to new user', {email:"newuser@mal.com"} );

  // Alternatively, you could also do:
  await agenda.schedule('*/3 * * * *', 'send confirmation to new user', {email:"newuser@mal.com"});
   

выполнить задание в понедельник в 09:00

         await agenda.schedule('0 9 * * 1', 'MondayJob', {msg:"guess what today is 'Monday'"});

запустить в субботу в 23:45 (23:45)

      await agenda.schedule('45 23 * * 6', 'jobName', {});
Другие вопросы по тегам