Ну, во-первых, нет, это не настоящий 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 — это очень просто. Я не знал этого до того дня, когда мне пришлось написать свой собственный !