Иногда возникает задача запускать приложение на node.js по расписанию — допустим, раз в час. Ведь node.js — это не только веб-сервер, это ещё и удобный скриптовый движок которым можно решать задачи, не требующие создания сервера либо вообще не связанные с вебом.

Стандартный линуксовый cron, к сожалению, тяжело настроить для такой цели. Но и не нужно, потому что существует модуль node-cron!

Устанавливается он командой npm install cron и предоставляет удобный API для создания расписаний выполнения. Рассмотрим простой пример его применения.

var cronJob=require('cron').CronJob;

new cronJob('* 25 * * * *', function(){
    console.log('Наступила двадцать пятая минута часа');
}

Как видим, использовать его очень легко. Синтаксис расписания — такой же, как и у стандартного cron, однако напомню основные его положения.

Пять элементов, разделённых пробелами, задают время выполнения таким образом: «секунда минута час день месяц день_недели».  На месте каждого элемента может находиться число, список/диапазон чисел или звёздочка. Каждую минуту все задания cron проверяются на совпадение с текущей датой и временем, и при совпадении задание выполняется.

Если в элементе находится число — то выбранная часть даты/времени будет проверяться на совпадение с этим числом. Например, «* 57 * * 5 2″ будет срабатывать в каждый вторник мая в каждую 57-ю минуту — в 00:57:00, в 01:57:00 и так далее. «* 0 * * * *» будет срабатывать каждое начало часа.Если в элементе находится выражение — список или диапазон, например «* 28-31 * * * 5-6″ сработает каждую пятницу и субботу с 28 по 31 минуту. Также можно указывать более осмысленные расписания, например «* */5 * * * *» — каждая пятая минута, задание будет выполняться раз в пять минут. Ну а «* */5 9-18 * * * *» — раз в пять минут, но если время — с 9 часов утра по 6 вечера. Можно поставить туда echo «не отвлекайся на консоль, работай!»

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