Есть ли библиотека планировщика заданий для node.js? [закрыто]


155

Есть ли какая-нибудь cron-подобная библиотека, которая позволила бы мне запланировать запуск некоторой функции в определенное время (например, 15:30, а не x часов и т. Д.)? Если нет такой библиотеки, как это должно быть реализовано? Должен ли я просто установить обратный вызов, который будет вызываться каждую секунду, проверить время и запустить запланированные задания на время или как?


4
node-cron кажется очень хорошим вариантом
JtR

var schedule = require ('node-schedule'); это лучшие вещи. ура !!!
Saumyajit

Ответы:


122

node-cron делает то, что я описал


4
Вы пишете объявления cronjob в app.js / scripts.js?
ArVan

позволяет ли node-cron редактировать системные задания cron из node.js? Это зависит от запущенного процесса узла? или это позволит вам запускать программы даже после завершения основного процесса?
Аджар

5
@ Ajar нет, после завершения процесса nodejs все задания будут потеряны. Нет таблицы cron, поставляемой с node-cron
Upvote

1
Я так думаю @ChrisC. Если я не использую какие-либо рамки, я объявляю кроны в app.js. В sails.jsЯ делаю это вbootstrap
ArVan

2
@arVan, если вам интересно, я на самом деле начал работать над agendaдобавлением поддержки Waterline здесь: github.com/mikermcneil/agenda (буквально только что началось - должен иметь некоторый полезный прогресс на следующей неделе)
mikermcneil

44

планировщик узлов Планировщик заданий, похожий на cron и не похожий на cron, для Node.


2
Это позволяет избежать иногда запутанного синтаксиса crontab, и, на мой взгляд, немного более читабельно.
Саймон Ист

как повестка дня это швы, чтобы обеспечить постоянство 0.1.13
drdrej

5
Расписание узла не обеспечивает постоянство. Согласно документации: Note that node-schedule is designed for in-process scheduling, i.e. scheduled jobs will only fire as long as your script is running, and the schedule will disappear when execution completes.
Майк Хедман

34

Повестка дня - это облегченное планирование заданий для узла. Это поможет вам.


1
повестка дня основана на node-cron с постоянным слоем (монго). так что ответ выше лучше.
drdrej

51
Чтобы уточнить, как автор повестки дня, на самом деле он вообще не основан на node-cron ...
Райан

1
Библиотека повестки дня является единственной лучшей библиотекой, так как ее установка проста и ее использование удобно для пользователя. Слава @Ryan
Vimalraj Selvam

4
Я обнаружил agendaнепоследовательное поведение и не советовал бы его использовать. Проверьте открытые вопросы и PR, чтобы сделать свой собственный звонок.
Russbear

2
знать, повестка дня не готова к производству. У него есть проблемы с утечкой памяти и проверка на наличие проблем. Все еще есть много ошибок. Это выглядит многообещающе, когда готово.
Себастьян

15

Later.js - довольно хорошая библиотека JavaScript-планировщика. Может работать на Node.js или в веб-браузере.


3
Я попробовал несколько предложений в этой теме, но этот модуль оказался наиболее удобным и понятным для работы с ... спасибо!
Джин Бо

12

Я использую kue: https://github.com/learnboost/kue . Это довольно мило.

Официальные характеристики и мои комментарии:

  1. отложенные работы.
    • Если вы хотите, чтобы задание выполнялось в определенное время, рассчитайте миллисекунды между этим временем и сейчас. Вызовите job.delay (миллисекунды) (в документе указано минуты, что неверно.) Не забудьте добавить "jobs.promote ();" когда вы начинаете работу.
  2. работа события и прогресс pubsub.
    • Я не понимаю это
  3. богатый интегрированный интерфейс.
    • Очень полезно. Вы можете проверить статус задания (выполнено, запущено, отложено) во встроенном интерфейсе и не нужно писать код. И вы можете удалить старые записи в пользовательском интерфейсе.
  4. бесконечная прокрутка
    • Иногда не работает. Нужно обновить.
  5. Индикация прогресса пользовательского интерфейса
    • Хорошо для трудоемких работ.
  6. ведение журнала работы
    • Поскольку они являются отложенными заданиями, вы должны зарегистрировать полезную информацию в задании и проверить позже через интерфейс.
  7. работает на Redis
    • Очень полезно. Когда вы перезапустите приложение node.js, все записи заданий все еще там, и запланированные задания тоже будут выполняться!
  8. дополнительные попытки
    • Ницца.
  9. возможности полнотекстового поиска
    • Хорошо.
  10. RESTful JSON API
    • Звучит хорошо, но я никогда им не пользуюсь.

Редактировать:

  1. Куэ не cron как библиотека.
  2. По умолчанию kue не поддерживает задание, которое выполняется повторно (например, каждое воскресенье).

6
Kue - это очередь заданий, а не планировщик.
Леонид Бесчастный

1
@LeonidBeschastny Kue - очередь на работу. И это тоже планировщик, потому что он может «позволить мне запланировать запуск некоторой функции в определенное время».
Винс Юань

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

@LeonidBeschastny Вы правы. Kue не предоставляет API для планирования работы на определенное время. Но, как я уже говорил, «если вы хотите, чтобы задание выполнялось в определенное время, вычислите миллисекунды между этим временем и сейчас. Вызовите job.delay (миллисекунды) (в документе указано минуты, что неверно.)« Это очень легко ,
Винс Юань

1
Вы можете попробовать Kué-планировщик, который похож на aganda
Fruch

9

node-crontab позволяет редактировать системные задания cron из node.js. Использование этой библиотеки позволит вам запускать программы даже после завершения основного процесса. Отказ от ответственности: я разработчик.


так сохраняется, если сервер узла перезагружен?
Jonperl


Да, рабочие места сохраняются.
Благо

его лицензия GPL, поэтому не может быть использована в коммерческом проекте.
drdrej

5
Лицензия теперь MIT
Благо

8

Вы можете использовать timexe

Он прост в использовании, легок, не имеет зависимостей, имеет улучшенный синтаксис по сравнению с cron, с разрешением в миллисекундах и работает в браузере.

Установка:

npm install timexe

Использование:

var timexe = require('timexe');
var res = timexe("* * * 15 30", function(){ console.log("It's now 3:30 pm"); });

(Я автор)


Могу ли я получить пример для этого, пожалуйста?
Алекс

1
Пожалуйста, ознакомьтесь с примерами на github: github.com/paragi/timexe
Саймон Ригет,

2

Я являюсь поклонником нода-рунра . У него очень простой подход к созданию работы. Также очень легко и понятно объявить время и интервал. Например, чтобы выполнять работу каждые 10 минут 20 секунд,

Runnr.addIntervalJob('10:20', function(){...}, 'myjob')

Чтобы делать работу в 10 утра и 3 часа дня,

Runnr.addDailyJob(['10:0:0', '15:0:0'], function(){...}, 'myjob')

Это так просто. Для получения дополнительной информации: https://github.com/Saquib764/node-runnr



1

И node-schedule, и node-cron мы можем использовать для реализации планировщиков на основе cron.

ПРИМЕЧАНИЕ : для генерации выражений cron вы можете использовать этот cron_maker


0

Это подходит не всем, но если ваше приложение уже настроено на прием команд через сокет, вы можете использовать netcat для выдачи команд через правильный cron.

echo 'mycommand' | nc -U /tmp/myapp.sock
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.