Планировщик задач в Node.js: node-cron, node-schedule и Bull

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Планировщик задач в Node.js: обзор библиотек node-cron, node-schedule и Bull

В современной веб-разработке на Node.js часто возникает потребность выполнять код по расписанию или с задержкой. Будь то отправка email-рассылок, очистка кэша, генерация отчётов или синхронизация данных — без надёжного планировщика задач не обойтись. В этой статье мы разберём три популярных инструмента: node-cron, node-schedule и Bull. Вы узнаете их особенности, примеры использования и поймёте, какой выбрать под свою задачу.

1. node-cron — классика Cron для Node.js

node-cron — это минималистичная библиотека, реализующая синтаксис Unix-планировщика cron. Она идеально подходит для простых повторяющихся задач.

Установка

npm install node-cron

Пример: задача, выполняющаяся каждую минуту

const cron = require('node-cron');

cron.schedule('* * * * *', () => {
  console.log('Задача выполняется каждую минуту');
});

Формат cron-выражения

Выражение состоит из 5 полей:

  • секунда (0-59, опционально)
  • минута (0-59)
  • час (0-23)
  • день месяца (1-31)
  • месяц (1-12)
  • день недели (0-7, 0 и 7 = воскресенье)

Продвинутый пример: ежедневно в 8:30 утра

cron.schedule('30 8 * * *', () => {
  // Отправка утренней статистики
  sendMorningReport();
});

Особенности

  • Поддержка временных зон через опцию timezone
  • Возможность запуска и остановки задач
  • Лёгкий вес (~20 КБ)
  • Не подходит для сложной логики с очередями

2. node-schedule — гибкий планировщик с рекуррентными правилами

node-schedule предоставляет более богатый API: можно задавать расписание через объекты, а не только cron-строки. Это удобно для сложных сценариев (например, «каждый второй вторник месяца в 15:00»).

Установка

npm install node-schedule

Пример: задача по cron-выражению

const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', () => {
  console.log('Запуск каждые 5 минут');
});

Пример: рекуррентное правило через объект

const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [1, 3, 5]; // Пн, Ср, Пт
rule.hour = 10;
rule.minute = 30;

schedule.scheduleJob(rule, () => {
  console.log('Задача по будням в 10:30');
});

Пример: отложенный запуск

const date = new Date(Date.now() + 5000); // через 5 секунд
schedule.scheduleJob(date, () => {
  console.log('Одноразовая задача через 5 секунд');
});

Особенности

  • Гибкое задание правил (дни недели, месяцы, диапазоны)
  • Поддержка одноразовых задач по дате
  • Возможность отмены задачи: job.cancel()
  • Не поддерживает кластеризацию и очереди

3. Bull — мощная очередь с планировщиком и повторами

Bull — это не просто планировщик, а полноценная система очередей на основе Redis. Она идеальна для продакшн-сред: поддерживает отложенные задачи, повторы при ошибках, приоритеты и параллельную обработку.

Установка

npm install bull
# Требуется установленный Redis

Пример: простая задача с задержкой

const Queue = require('bull');
const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');

// Добавляем задачу с задержкой 1 час
myQueue.add({ email: 'user@example.com' }, { delay: 3600000 });

// Обработчик
myQueue.process(async (job) => {
  console.log(`Отправка email для ${job.data.email}`);
  await sendEmail(job.data.email                    

Рекомендаций