Ну, во-первых, нет, это не настоящий CRON. CRON на самом деле является инструментом Unix для установки повторяющихся задач, а то, что мы будем использовать сегодня, — это библиотека, которая использует другую библиотеку, которая использует старый добрый setTimeout JavaScript. Причудливо, правда?
Интересный факт: Крон был назван в честь греческого бога времени Кроноса.
Библиотека, которую мы собираемся использовать, — это пакет npm node-schedule. Хотя есть и другие библиотеки, такие как node-cron и cron, которые выполняют ту же работу, мы будем использовать node-schedule, потому что она предлагает некоторую гибкость, когда мы можем использовать либо классический синтаксис cron, простой объект javascript, либо конкретный повторяющийся правила для определения времени выполнения наших задач. Итак, вот TL;DR (слишком долго не читал) для всех вас:
TL;DR: используйте https://www.npmjs.com/package/node-schedule
Прежде всего, я упомянул синтаксис cron. Что это ?
Это просто способ определить повторяющееся время для наших задач. Он состоит из 5 или 6 символов, разделенных пробелами. Слева направо это секунды, минуты, часы, день месяца, месяц года, день недели. Следующее изображение упрощает это:
Так, например, если мы хотим, чтобы наша задача выполнялась каждый новый год ровно в полночь, мы напишем что-то вроде этого: 0 0 0 1 1 *
как насчет каждого буднего дня в 7 утра, может быть для будильника Часы ? В этом случае это будет: 0 0 7 * * 1–5
Итак, приступим к разгадыванию. Сначала нужно будет установить пакет npm:
npm i node-schedule --save
Затем мы требуем этого и используем функцию scheduleJob для вызова нашего скрипта или нашего кода, когда придет время. Давайте используем наш пример будильника
const schedule = require('node-schedule') const alarm = require('./alarm.js') const scheduledJob = schedule.scheduleJob('0 0 7 * * 1–5', () => { alarm.wakeMeUp() });
И это все. Нет, на самом деле, это все, что вам нужно сделать. Обратите внимание, как я сохранил возвращаемое значение scheduleJob в переменной; таким образом я могу использовать его, чтобы остановить задание, пропустить следующий вызов, точно знать, когда оно будет… и т. д. Все эти функции можно найти в документации.
Это все на сегодня. Мотивация для меня написать эту статью в блоге для этой, казалось бы, простой задачи заключается в том, что всякий раз, когда я слышал, как коллеги говорят о заданиях cron, я всегда думал, что это что-то сложное. Конечно, трудная часть — убедиться, что он выполняется правильно и надежно во всех случаях, когда это необходимо, но написание запланированных заданий Node.js — это очень просто. Я не знал этого до того дня, когда мне пришлось написать свой собственный !