Planificador de tareas en TypeScript: biblioteca node-schedule

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Biblioteca node-schedule: planificador de tareas flexible en TypeScript



En el desarrollo web moderno, a menudo surge la necesidad de ejecutar ciertas acciones en un momento determinado o según un horario. Para el ecosistema Node.js y TypeScript existen varias soluciones, pero node-schedule destaca por su flexibilidad y simplicidad. Esta biblioteca permite crear tanto tareas únicas para una fecha exacta como tareas recurrentes utilizando expresiones cron o intervalos legibles para humanos.



Características principales de node-schedule



  • Ejecución en hora exacta – iniciar una tarea en un momento específico (fecha + hora)
  • Expresiones cron – sintaxis clásica para tareas periódicas (cada minuto, cada hora, etc.)
  • Reglas recurrentes – configuración flexible de repeticiones usando el objeto RecurrenceRule
  • Cancelación y pausa – gestión de tareas activas
  • Soporte de zonas horarias – trabajo con hora local


Instalación y configuración



Para empezar, instale el paquete a través de npm:



npm install node-schedulenpm install @types/node-schedule --save-dev


Importación en un archivo TypeScript:



import * as schedule from 'node-schedule';


Ejemplo 1: Tarea para una fecha exacta



Creemos una tarea que se ejecutará el 31 de diciembre de 2024 a las 23:59:59:



const date = new Date(2024, 11, 31, 23, 59, 59);

const job = schedule.scheduleJob(date, () => { console.log('🎉 ¡Feliz Año Nuevo 2025!');});

// Cancelar la tarea (si es necesario)// job.cancel();


Ejemplo 2: Tarea periódica con expresión cron



Ejecutar una tarea cada 5 minutos:



const job = schedule.scheduleJob('*/5 * * * *', () => {    console.log('Ejecutando tarea cada 5 minutos');});


Formato de la expresión cron: segundo minuto hora día_del_mes mes día_de_la_semana. En node-schedule se admiten los 6 campos (a diferencia del cron clásico de 5 campos).



Ejemplo 3: Uso de RecurrenceRule



Creemos una tarea que se ejecute cada martes y jueves a las 10:30 a.m.:



const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [2, 4]; // martes y juevesrule.hour = 10;rule.minute = 30;

const job = schedule.scheduleJob(rule, () => { console.log('Enviando informe semanal');});


RecurrenceRule admite los siguientes campos:



  • year – año o array de años
  • month – mes (0-11) o array
  • date – día del mes (1-31)
  • dayOfWeek – día de la semana (0-6, donde 0 es domingo)
  • hour – hora (0-23)
  • minute – minuto (0-59)
  • second – segundo (0-59)


Ejemplo 4: Reglas combinadas



Tarea que se ejecuta el último día de cada mes a las 23:59:



const rule = new schedule.RecurrenceRule();rule.month = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]; // todos los mesesrule.date = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; // últimos días de cada mesrule.hour = 23;rule.minute = 59;rule.second = 59;

const job = schedule.scheduleJob(rule, () => { console.log('Ejecución el último día del mes');});


Gestión de tareas



La biblioteca proporciona métodos para el control total de las tareas:



// Crear una tareaconst job = schedule.scheduleJob('*/10 * * * * *', () => {    console.log('Cada 10 segundos');});

// Cancelar la tareajob.cancel();

// Verificar si la tarea está activaconsole.log(job.pending()); // true o false

// Cancelar todas las tareasschedule.gracefulShutdow

Recommendations