Для работы с 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.