Планировщик задач на TypeScript: библиотека node-schedule

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

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

Начать курс

Библиотека 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();

Работа с часовыми поясами

По умол

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