Что такое node-cron?
node-cron — это легковесная библиотека для Node.js, которая позволяет выполнять JavaScript-функции по расписанию, используя синтаксис cron-выражений. Она идеально подходит для автоматизации рутинных задач: отправки email-уведомлений, очистки базы данных, парсинга веб-страниц или генерации отчётов.
Зачем нужен планировщик задач?
В веб-разработке часто требуется выполнять код не сразу, а через определённые интервалы. Ручной запуск скриптов через setInterval() или setTimeout() неудобен для сложных расписаний (например, «каждый второй вторник месяца в 15:00»). node-cron решает эту проблему, предоставляя гибкий и читаемый способ задания времени.
Установка
Установите библиотеку через npm:
npm install node-cronИли используйте yarn:
yarn add node-cronОсновные функции
- cron.schedule(expression, callback) — запускает функцию по расписанию.
- cron.validate(expression) — проверяет корректность cron-выражения.
- task.stop() — останавливает задачу.
- task.start() — возобновляет выполнение остановленной задачи.
- Поддержка секунд (дополнительное поле в начале выражения).
Пример кода на JavaScript (Node.js)
Рассмотрим простой пример: запуск задачи каждую минуту, которая выводит текущее время в консоль.
const cron = require('node-cron');
// Задача выполняется каждую минуту
const task = cron.schedule('* * * * *', () => {
console.log('Запуск задачи:', new Date().toLocaleTimeString());
});
// Запустить задачу
task.start();
// Остановить задачу через 5 минут
setTimeout(() => {
task.stop();
console.log('Задача остановлена');
}, 300000);Расшифровка cron-выражения: '* * * * *' — минута, час, день месяца, месяц, день недели. Звёздочка означает «каждый». Например, '0 9 * * 1-5' — каждый будний день в 9:00.
Пример с валидацией:
const cron = require('node-cron');
const expression = '30 4 * * 0'; // каждое воскресенье в 4:30 утра
if (cron.validate(expression)) {
cron.schedule(expression, () => {
console.log('Воскресная уборка данных...');
});
} else {
console.error('Некорректное cron-выражение');
}Когда использовать node-cron?
- Автоматизация бэкапов: создание резервных копий базы данных раз в сутки.
- Отправка рассылок: ежедневная рассылка дайджеста подписчикам.
- Мониторинг: проверка доступности внешних API каждые 5 минут.
- Очистка кэша: удаление устаревших данных из Redis или файловой системы.
- Парсинг данных: загрузка курсов валют или новостей по расписанию.
Библиотека идеально подходит для небольших и средних проектов, где не нужен полноценный оркестратор задач вроде Bull или Agenda. Если ваше приложение работает на одном сервере и требует простого cron-подобного поведения — node-cron станет отличным выбором.