Node-cron

Для работы с Node-cron необходимо установить пакет через npm:

npm install node-cron

Импорт модуля в проекте выглядит следующим образом:

const cron = require(&

Node-cron позволяет планировать выполнение функций на основе синтаксиса cron, который представляет собой строку с пятью полями: минуты, часы, день месяца, месяц, день недели. Например:

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

Синтаксис cron-выражений

Каждое поле cron-выражения имеет допустимые значения:

Поле Значение
Минуты 0-59
Часы 0-23
День месяца 1-31
Месяц 1-12
День недели 0-7 (0 и 7 — воскресенье)

Особенности использования:

  • * — любое значение.
  • , — перечисление значений, например 1,15,30.
  • - — диапазон, например 9-17 (с 9 до 17 часов).
  • / — шаг, например */5 (каждые 5 минут).

Пример сложного cron-выражения:

// Выполнять задачу каждый день в 9:00 и 18:00
cron.schedule('0 9,18 * * *', () => {
  console.log('Утреннее и вечернее выполнение задачи');
});

Планирование асинхронных задач

Node-cron поддерживает выполнение асинхронных функций. Это особенно важно для задач, которые обращаются к базе данных или внешним API:

cron.schedule('*/10 * * * *', async () => {
  try {
    const data = await fetchDataFromAPI();
    console.log('Данные получены:', data);
  } catch (error) {
    console.error('Ошибка при выполнении задачи:', error);
  }
});

Использование async/await гарантирует корректное выполнение асинхронного кода и обработку ошибок.

Управление задачами

Node-cron позволяет контролировать выполнение задач после их создания:

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

// Остановить задачу
task.stop();

// Запустить задачу
task.start();

// Полностью удалить задачу
task.destroy();

Можно комбинировать несколько задач в одном приложении и управлять ими индивидуально, что особенно полезно при сложных сценариях автоматизации.

Временные зоны

По умолчанию Node-cron использует системное время сервера. Для корректной работы в разных часовых поясах можно использовать опцию timezone:

cron.schedule('0 12 * * *', () => {
  console.log('Выполняется каждый день в 12:00 по МСК');
}, {
  timezone: 'Europe/Moscow'
});

Поддерживаются часовые пояса в формате IANA, например America/New_York или Asia/Tokyo.

Обработка ошибок и надежность

Для обеспечения надежности рекомендуется:

  • Использовать блок try/catch внутри планируемой функции.
  • Логировать успешные и неуспешные выполнения задач.
  • Не блокировать главный поток; длительные операции выполнять асинхронно.
cron.schedule('*/30 * * * *', async () => {
  try {
    await processHeavyTask();
    console.log('Задача выполнена успешно');
  } catch (error) {
    console.error('Ошибка при выполнении тяжелой задачи:', error);
  }
});

Масштабирование и производительность

Для большого количества задач:

  • Разделять задачи по категориям и управлять ими через отдельные объекты.
  • Использовать stop и start для временной приостановки выполнения.
  • Рассматривать возможность делегирования тяжелых задач в очередь задач или отдельный процесс.

Node-cron подходит для задач автоматизации, регулярной отчётности, периодической очистки базы данных и других сценариев, где важна надежная периодичность выполнения.

Интеграция с Puppeteer

Node-cron идеально подходит для автоматизированного запуска скриптов Puppeteer, например для сбора данных с сайтов или тестирования:

cron.schedule('0 8 * * *', async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  const content = await page.content();
  console.log('Содержимое страницы:', content);
  await browser.close();
});

Таким образом, можно настроить ежедневные или ежечасные проверки функциональности веб-приложения без ручного запуска скриптов.

Node-cron обеспечивает гибкость и надежность при организации регулярных задач в приложениях на Node.js.