Подтвердить что ты не робот

Мне нужен планировщик Nodejs, который позволяет выполнять задания с разными интервалами

Я ищу график работы node, который позволит мне запланировать ряд задач с разными интервалами. Например,

  • функция вызова A каждые 30 секунд
  • функция вызова B каждые 60 секунд
  • функция вызова C каждые 7 дней

Я также хочу, чтобы можно было запустить и остановить процесс.

До сих пор я смотрел:

  • later - синтаксис меня смущает, также, по-видимому, вы не можете планировать задания за месяц

  • agenda - кажется наиболее перспективным, однако я смущен о функциональности базы данных

  • timeplan - слишком просто, не удается запустить и остановить

Я нахожу синтаксис последнего сбивающим с толку.

4b9b3361

Ответ 1

Я бы рекомендовал node-cron. Он позволяет запускать задачи с использованием шаблонов Cron, например.

'* * * * * *' - runs every second
'*/5 * * * * *' - runs every 5 seconds
'10,20,30 * * * * *' - run at 10th, 20th and 30th second of every minute
'0 * * * * *' - runs every minute
'0 0 * * * *' - runs every hour (at 0 minutes and 0 seconds)

Но также более сложные расписания, например

'00 30 11 * * 1-5' - Runs every weekday (Monday through Friday) at 11:30:00 AM. It does not run on Saturday or Sunday.

Пример кода: работа выполняется каждые 10 минут:

var cron = require('cron');
var cronJob = cron.job("0 */10 * * * *", function(){
    // perform operation e.g. GET request http.get() etc.
    console.info('cron job completed');
}); 
cronJob.start();

Вы можете найти больше примеров в node-cron wiki

Подробнее о конфигурации cron можно найти на cron wiki

Я использую эту библиотеку во многих проектах, и она выполняет эту работу. Надеюсь, что это поможет.

Ответ 2

Я использовал node-cron и agenda.

node -cron - очень простая библиотека, которая обеспечивает очень простой и понятный api, такой как crontab. Он не нуждается в какой-либо конфигурации и просто работает.

var cronJob = require('cron').CronJob;
var myJob = new cronJob('00 30 11 * * 1-5', function(){...});
myJob.start();

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

Примечание. Для использования Повестки дня

вам нужно Mongodb
var Agenda = require("Agenda");
var agenda = new Agenda({db: { address: 'localhost:27017/agenda-example'}});
agenda.every('*/3 * * * *', 'delete old users');
agenda.start();

Ответ 3

Я написал модуль node, который предоставляет оболочку вокруг setInterval, используя длительность времени, предоставляющую декларативный интерфейс:

npm установить каждый момент

var every = require('every-moment');

var timer = every(5, 'seconds', function() {
    console.log(this.duration);
});

every(2, 'weeks', function() {
    console.log(this.duration);
    timer.stop();
    this.set(1, 'week');
    this.start();
});

https://www.npmjs.com/package/every-moment

https://github.com/raygerrard/every-moment

Ответ 4

Я считаю, что лучший рейтинг

1.node-график

2.later

3.crontab

и образец node-schedule находится ниже:

var schedule = require("node-schedule");
var rule = new schedule.RecurrenceRule();
//rule.minute = 40;
rule.second = 10;
var jj = schedule.scheduleJob(rule, function(){
    console.log("execute jj");
});

Возможно, вы найдете ответ от node модулей.

Ответ 6

Я написал небольшой модуль для этого, который называется timexe:

  • Его простой, небольшой надежный код и не имеет зависимостей
  • Разрешение в миллисекундах и высокая точность с течением времени
  • Крон похож, но не совместим (обратный порядок и другие улучшения)
  • Я тоже работаю в браузере

Установка:

npm install timexe

использовать:

var timexe = require('timexe');
//Every 30 sec
var res1=timexe("* * * * * /30", function() console.log("Its time again")});

//Every minute
var res2=timexe("* * * * *",function() console.log("a minute has passed")});

//Every 7 days
var res3=timexe("* y/7",function() console.log("its the 7th day")});

//Every Wednesdays 
var res3=timexe("* * w3",function() console.log("its Wednesdays")});

// Stop "every 30 sec. timer"
timexe.remove(res1.id);

Вы можете добиться запуска/остановки, удалив/повторно добавив запись непосредственно в массив заданий timexe. Но это не экспресс-функция.