Planificador de tareas en Node.js (node-cron, node-schedule, Bull)

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: revisión y ejemplos de uso



En el desarrollo backend moderno, a menudo surge la necesidad de ejecutar código según un horario: enviar boletines por correo electrónico, limpiar la caché, crear copias de seguridad de bases de datos o actualizar datos agregados. En el ecosistema de Node.js, existen varias bibliotecas maduras para estos fines. En este artículo, analizaremos tres enfoques principales para la planificación de tareas: cron clásico, horario flexible y colas de tareas.



1. node-cron — cron clásico para JavaScript



node-cron es una biblioteca minimalista que permite ejecutar funciones mediante expresiones cron estándar. Es ideal para tareas periódicas simples (cada minuto, cada hora, todos los días a las 3:00).



Instalación:



npm install node-cron


Ejemplo de una tarea que se ejecuta cada minuto:



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

cron.schedule('* * * * *', () => { console.log('La tarea se ejecuta cada minuto');});


Estructura de la expresión cron: segundo minuto hora día_del_mes mes día_de_la_semana (en node-cron el segundo es opcional).



Ejemplos de expresiones:

  • '0 0 * * *' — todos los días a medianoche
  • '*/5 * * * *' — cada 5 minutos
  • '0 9-18 * * 1-5' — cada hora de 9 a 18 los días laborables
  • '30 3 * * 0' — todos los domingos a las 3:30


La biblioteca admite la validación de expresiones y el inicio/detención de tareas:



const task = cron.schedule('*/10 * * * *', () => {  // tarea cada 10 minutos});

// Detener la tareatask.stop();

// Reanudartask.start();

// Verificar si la tarea está activaconsole.log(task.isStarted()); // true/false


Cuándo usarlo: para acciones periódicas simples donde no se requiere almacenamiento de estado o manejo de errores.



2. node-schedule — horario flexible con soporte de reglas recurrentes



node-schedule es una alternativa más potente que permite definir horarios no solo mediante cron, sino también a través de objetos de JavaScript con indicación explícita de fechas, días de la semana y horas.



Instalación:



npm install node-schedule


Ejemplo con expresión cron:



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

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


La principal ventaja es la posibilidad de definir un horario mediante un objeto:



const job = schedule.scheduleJob({  hour: 14,  minute: 30,  dayOfWeek: [1, 3, 5] // lunes, miércoles, viernes}, () => {  console.log('14:30 los días laborables');});


También se puede programar una tarea única para una fecha específica:



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

schedule.scheduleJob(date, () => { console.log('¡Año Nuevo ha llegado!');});


La biblioteca admite la cancelación de tareas y la verificación de la próxima hora de ejecución:



// Cancelar la tareajob.cancel();

// Obtener la próxima fecha de ejecuciónconsole.log(job.nextInvocation()); // Date object


Cuándo usarlo: cuando se necesita un control preciso del tiempo, combinación de reglas o tareas únicas.



3. Bull — colas de tareas con planificación y reintentos



Bull es un sistema completo de colas basado en Redis que incluye un potente planificador. Bull permite no solo retrasar tareas, sino también gestionar reintentos, prioridades y ejecución paralela.



Instalación:



npm install bull


Ejemplo básico de una cola con una tarea retrasada:



const Queue = require('bull');

const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 63

Recommendations