Библиотека node-schedule: гибкий планировщик задач на TypeScript
В современной веб-разработке часто возникает необходимость выполнять определённые действия в заданное время или по расписанию. Для экосистемы Node.js и TypeScript существует несколько решений, но node-schedule выделяется своей гибкостью и простотой. Эта библиотека позволяет создавать как одноразовые задачи на точную дату, так и рекуррентные задания с использованием cron-выражений или человекочитаемых интервалов.
Основные возможности node-schedule
- Точное время выполнения – запуск задачи в конкретный момент времени (дата + время)
- Cron-выражения – классический синтаксис для периодических задач (каждую минуту, каждый час и т.д.)
- Рекуррентные правила – гибкая настройка повторений с помощью объекта
RecurrenceRule - Отмена и приостановка – управление активными задачами
- Поддержка часовых поясов – работа с локальным временем
Установка и подключение
Для начала работы установите пакет через npm:
npm install node-schedule
npm install @types/node-schedule --save-dev
Импорт в TypeScript-файле:
import * as schedule from 'node-schedule';
Пример 1: Задача на точную дату
Создадим задачу, которая выполнится 31 декабря 2024 года в 23:59:59:
const date = new Date(2024, 11, 31, 23, 59, 59);
const job = schedule.scheduleJob(date, () => {
console.log('🎉 С Новым 2025 годом!');
});
// Отмена задачи (если нужно)
// job.cancel();
Пример 2: Периодическая задача с cron-выражением
Запуск задачи каждые 5 минут:
const job = schedule.scheduleJob('*/5 * * * *', () => {
console.log('Выполняю задачу каждые 5 минут');
});
Формат cron-выражения: секунда минута час день_месяца месяц день_недели. В node-schedule поддерживаются все 6 полей (в отличие от классического cron с 5 полями).
Пример 3: Использование RecurrenceRule
Создадим задачу, которая выполняется каждый вторник и четверг в 10:30 утра:
const rule = new schedule.RecurrenceRule();
rule.dayOfWeek = [2, 4]; // вторник и четверг
rule.hour = 10;
rule.minute = 30;
const job = schedule.scheduleJob(rule, () => {
console.log('Отправка еженедельного отчёта');
});
RecurrenceRule поддерживает следующие поля:
year– год или массив годовmonth– месяц (0-11) или массивdate– день месяца (1-31)dayOfWeek– день недели (0-6, где 0 – воскресенье)hour– час (0-23)minute– минута (0-59)second– секунда (0-59)
Пример 4: Комбинированные правила
Задача, которая выполняется в последний день каждого месяца в 23:59:
const rule = new schedule.RecurrenceRule();
rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; // все месяцы
rule.date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // последние дни каждого месяца
rule.hour = 23;
rule.minute = 59;
rule.second = 59;
const job = schedule.scheduleJob(rule, () => {
console.log('Выполнение в последний день месяца');
});
Управление задачами
Библиотека предоставляет методы для полного контроля над задачами:
// Создание задачи
const job = schedule.scheduleJob('*/10 * * * * *', () => {
console.log('Каждые 10 секунд');
});
// Отмена задачи
job.cancel();
// Проверка, активна ли задача
console.log(job.pending()); // true или false
// Отмена всех задач
schedule.gracefulShutdown();
Работа с часовыми поясами
По умол
Также в библиотеке
Авторизация и аутентификация в Rust: полное руководство
PDF генерация в Swift (iOS/macOS): обзор инструментов и примеры
GraphQL в C# (.NET): библиотеки Hot Chocolate и GraphQL.NET для создания API
Интернационализация (i18n) в PHP: Полное руководство с примерами