cron — это надежный инструмент для запуска заданий (функций или команд) по расписанию, определенному с использованием синтаксиса cron.
Идеально подходит для таких задач, как резервное копирование данных, уведомления и многое другое!
выполнять функцию всякий раз, когда запускается запланированное задание
выполнить задание, внешнее по отношению к процессу javascript (например, системную команду), используя child_process
используйте объект Date или Luxon DateTime вместо синтаксиса cron в качестве триггера для обратного вызова
использовать дополнительный слот для секунд (если оставить его выключенным, по умолчанию будет установлено значение 0 и будет соответствовать поведению Unix)
npm установить cron
Функции
Установка
Миграция с v2 на v3
Основное использование
Шаблоны Крон
Обзор синтаксиса Cron
Поддерживаемые диапазоны
Ошибки
API
Автономные функции
Класс CronJob
Класс CronTime
Сообщество
Присоединяйтесь к сообществу
Содействие
Общий вклад
Отправка ошибок/проблем
Благодарности
Лицензия
С появлением TypeScript в версии 3 и согласованием с шаблонами cron UNIX было внесено несколько изменений:
Индексация месяцев: изменена с 0-11
на 1-12
. Поэтому вам нужно увеличить все числовые месяцы на 1.
Индексация по дням недели: добавлена поддержка для 7
, таких как воскресенье.
CronJob
Конструктор больше не принимает объект в качестве первого и единственного параметра. Вместо этого используйте CronJob.from(argsObject)
.
Обратные вызовы теперь вызываются в том порядке, в котором они были зарегистрированы.
nextDates(count?: number)
теперь всегда возвращает массив (пустой, если аргумент не указан). Вместо этого используйте nextDate()
для одной даты.
удален метод job()
в пользу new CronJob(...args)
CronJob.from(argsObject)
удален метод time()
в пользу new CronTime()
import { CronJob } from 'cron';const job = new CronJob('* * * * * *', // cronTimefunction () {console.log('Вы будете видеть это сообщение каждую секунду');}, // onTicknull , // onCompletetrue, // start'America/Los_Angeles' // timeZone);// job.start() здесь является необязательным, поскольку для четвертого параметра установлено значение true.
// эквивалентное задание с использованием статического метода from, предоставляющего параметры в виде objectconst job = CronJob.from({cronTime: '* * * * * *',onTick: function () {console.log('Вы увидите это сообщение каждую секунду');},start: true,timeZone: 'America/Los_Angeles'});
Примечание. В первом примере выше четвертый параметр
CronJob()
запускает задание автоматически. Если оно не указано или установлено значение false, вы должны явно запустить задание с помощьюjob.start()
.
Более сложные примеры можно найти в каталоге примеров.
Шаблоны Cron являются основой этой библиотеки. Ознакомьтесь с синтаксисом:
- `*` Asterisks: Any value - `1-3,5` Ranges: Ranges and individual values - `*/2` Steps: Every two units
Подробные схемы и пояснения доступны на сайте crontab.org. В примерах по ссылке пять полей и 1 минута в качестве максимальной детализации, но наше планирование cron поддерживает расширенный формат с шестью полями, обеспечивающий точность второго уровня. Такие инструменты, как crontab.guru, могут помочь в построении шаблонов, но не забывайте учитывать поле секунд.
Вот краткая ссылка на формат UNIX Cron, который использует эта библиотека, плюс добавленное второе поле:
field allowed values ----- -------------- second 0-59 minute 0-59 hour 0-23 day of month 1-31 month 1-12 (or names, see below) day of week 0-7 (0 or 7 is Sunday, or use names)
Имена также можно использовать для полей «месяц» и «день недели». Используйте первые три буквы конкретного дня или месяца (регистр не имеет значения). Допускаются диапазоны и списки имен.
Примеры: «понедельник, среда, пятница», «янв-март».
Объекты JS Date
и Luxon DateTime
не гарантируют миллисекундную точность из-за задержек вычислений. Этот модуль исключает миллисекундную точность для стандартного синтаксиса cron, но позволяет указывать дату выполнения через объекты JS Date
или Luxon DateTime
. Однако указание точного будущего времени выполнения, например добавление миллисекунды к текущему времени, может не всегда работать из-за этих задержек вычислений. Замечено, что задержки менее 4-5 мс могут привести к несогласованности. Хотя мы могли бы ограничить всю детализацию даты секундами, мы решили обеспечить большую точность, но предупреждаем пользователей о потенциальных проблемах.
Использование функций стрелок для onTick
привязывает их к родительскому контексту this
. В результате у них не будет доступа к this
контексту cronjob. Подробнее можно прочитать в выпуске №47 (комментарий).
sendAt
: указывает, когда будет выполнен CronTime
(возвращает объект Luxon DateTime
).
import * как cron из 'cron';const dt = cron.sendAt('0 0 * * *');console.log(`Задание будет выполняться по адресу: ${dt.toISO()}`);
timeout
: указывает количество миллисекунд в будущем, через которое будет выполняться CronTime
(возвращает число).
import * как cron из 'cron';const timeout = cron.timeout('0 0 * * *');console.log(`Задание будет выполнено через ${timeout}ms`);
constructor(cronTime, onTick, onComplete, start, timeZone, context, runOnInit, utcOffset, unrefTimeout)
:
cronTime
: [ОБЯЗАТЕЛЬНО] — время завершения работы. Это может быть синтаксис cron, объект JS Date
или объект Luxon DateTime
.
onTick
: [ОБЯЗАТЕЛЬНО] — функция для выполнения в указанное время. Если был предоставлен обратный вызов onComplete
, onTick
получит его в качестве аргумента.
onComplete
: [НЕОБЯЗАТЕЛЬНО] — вызывается, когда задание останавливается с помощью job.stop()
. Это также может быть вызвано onTick
после его запуска.
start
: [НЕОБЯЗАТЕЛЬНО] — определяет, должно ли задание начинаться до выхода из конструктора. По умолчанию — false
.
timeZone
: [НЕОБЯЗАТЕЛЬНО] — устанавливает часовой пояс выполнения. По умолчанию используется местное время. Проверьте допустимые форматы в документации Luxon.
context
: [НЕОБЯЗАТЕЛЬНО] — контекст выполнения метода onTick.
runOnInit
: [НЕОБЯЗАТЕЛЬНО] — мгновенно запускает инициализацию функции onTick
после ее завершения. По умолчанию — false
.
utcOffset
: [НЕОБЯЗАТЕЛЬНО] — указывает смещение часового пояса в минутах. Не может сосуществовать с timeZone
.
unrefTimeout
: [НЕОБЯЗАТЕЛЬНО] — полезно для управления поведением цикла событий. Более подробная информация здесь.
from
(статический): Создайте новый объект CronJob, предоставляющий аргументы в качестве объекта. См. имена и описания аргументов выше.
start
: Инициирует задание.
stop
: Останавливает работу.
setTime
: изменяет время для CronJob
. Параметр должен быть CronTime
.
lastDate
: предоставляет дату последнего выполнения.
nextDate
: указывает последующую дату, когда активируется onTick
.
nextDates(count)
: предоставляет массив предстоящих дат, которые инициируют onTick
.
fireOnTick
: позволяет изменять поведение вызова onTick
.
addCallback
: разрешает добавление обратных вызовов onTick
.
constructor(time, zone, utcOffset)
:
time
: [ОБЯЗАТЕЛЬНО] — время начала работы. Принимает синтаксис cron или объект JS Date.
zone
: [НЕОБЯЗАТЕЛЬНО] — эквивалент timeZone
из параметров CronJob
.
utcOffset
: [НЕОБЯЗАТЕЛЬНО] — аналог utcOffset
из параметров CronJob
.
Присоединяйтесь к серверу Discord! Здесь вы можете обсудить проблемы и получить помощь на более обычном форуме, чем GitHub.
Этот проект ищет помощи! Если вы заинтересованы в помощи с проектом, пожалуйста, ознакомьтесь с нашей сопроводительной документацией.
Пожалуйста, ознакомьтесь с нашей сопутствующей документацией, она содержит всю информацию, которую вам необходимо знать, прежде чем отправлять сообщение о проблеме.
Это проект усилий сообщества. В прямом смысле этот проект начался как проект с открытым исходным кодом на основе cron.js и перерос в нечто другое. Другие люди внесли в проект свой код, время и контроль. На данный момент здесь слишком много людей, поэтому мы просто скажем спасибо.
Особая благодарность Хироки Хориучи, Лундарлу Голою и koooge за их работу над типизацией DefinitelyTyped до того, как она была импортирована в версию 2.4.0.
Массачусетский технологический институт