Planificador de tareas en Node.js: node-schedule y node-cron

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

Planificador de tareas en Node.js: node-schedule y node-cron



En el desarrollo web moderno, a menudo surge la necesidad de realizar ciertas acciones en un momento determinado o a intervalos regulares. Por ejemplo, enviar informes por correo electrónico, limpiar la base de datos, analizar recursos externos o actualizar la caché. En el entorno Node.js, se utilizan planificadores de tareas para estos fines. Las dos herramientas más populares son node-schedule y node-cron. En este artículo, analizaremos ambas en detalle, proporcionaremos ejemplos de código y le ayudaremos a elegir la adecuada para su proyecto.



¿Por qué necesito un planificador de tareas en Node.js?

Node.js es un entorno de un solo subproceso con una arquitectura basada en eventos. Las funciones integradas setTimeout y setInterval permiten ejecutar código con un retraso o periódicamente, pero no son adecuadas para escenarios complejos:

  • No hay flexibilidad en la configuración (por ejemplo, "cada segundo lunes del mes a las 10:30").
  • No conservan el estado después de reiniciar la aplicación.
  • Dificultades con la gestión (cancelación, cambio de horario).

Los planificadores resuelven estos problemas proporcionando una API simple para crear, iniciar y cancelar tareas programadas.



Biblioteca node-schedule

node-schedule es un planificador flexible basado en una sintaxis similar a cron, pero con capacidades mejoradas. Permite establecer tareas recurrentes con precisión de minutos, así como tareas únicas para una fecha específica.



Instalación

npm install node-schedule


Características principales

  • Soporte para expresiones cron (6 campos: segundos, minutos, horas, día del mes, mes, día de la semana).
  • Posibilidad de establecer una ejecución única utilizando un objeto Date.
  • Reglas recurrentes utilizando el objeto RecurrenceRule.
  • Métodos cancel() y cancelNext() para gestionar tareas.


Ejemplo 1: Ejecutar una tarea cada 5 minutos

const schedule = require('node-schedule');

const job = schedule.scheduleJob('*/5 * * * *', function() { console.log('Tarea ejecutándose cada 5 minutos:', new Date().toLocaleString());});

// Cancelar la tarea después de 20 minutossetTimeout(() => { job.cancel(); console.log('Tarea cancelada');}, 20 * 60 * 1000);


Ejemplo 2: Tarea para una fecha específica

const schedule = require('node-schedule');

const date = new Date(2025, 5, 15, 10, 30, 0); // 15 de junio de 2025, 10:30:00

const job = schedule.scheduleJob(date, function() { console.log('Tarea única ejecutada a las', new Date().toLocaleString());});

console.log('Tarea programada para el', date.toLocaleString());


Ejemplo 3: Regla recurrente compleja

const schedule = require('node-schedule');

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Lunes, miércoles, viernesrule.hour = 9;rule.minute = 0;

const job = schedule.scheduleJob(rule, function() { console.log('Tarea ejecutándose a las 9:00 los días laborables (Lun, Mié, Vie)');});


Biblioteca node-cron

node-cron es una alternativa ligera basada en el cron clásico de los sistemas Unix. Es más simple de usar, pero menos flexible que node-schedule. Soporta 5 campos (minutos, horas, día del mes, mes, día de la semana).



Instalación

npm install node-cron


Características principales

  • Sintaxis cron estándar (5 campos).
  • Métodos start(), stop(), destroy().
  • Soporte de zonas horarias a través de la opción timezone.
  • Posibilidad de ejecutar una tarea inmediatamente con now().


Ejemplo 1: Ejecutar una tarea todos los días a medianoche

const c                    

Recommendations