Planificador de tareas en Node.js: node-cron, node-schedule y 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: resumen de las bibliotecas node-cron, node-schedule y Bull



En el desarrollo web moderno con Node.js, a menudo surge la necesidad de ejecutar código según un horario o con un retraso. Ya sea para enviar boletines por correo electrónico, limpiar la caché, generar informes o sincronizar datos, no se puede prescindir de un planificador de tareas confiable. En este artículo, analizaremos tres herramientas populares: node-cron, node-schedule y Bull. Conocerá sus características, ejemplos de uso y comprenderá cuál elegir para su tarea.



1. node-cron — el clásico Cron para Node.js

node-cron es una biblioteca minimalista que implementa la sintaxis del planificador Unix cron. Es ideal para tareas repetitivas simples.



Instalación

npm install node-cron


Ejemplo: tarea que se ejecuta cada minuto

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

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


Formato de expresión cron

La expresión consta de 5 campos:

  • segundo (0-59, opcional)
  • minuto (0-59)
  • hora (0-23)
  • día del mes (1-31)
  • mes (1-12)
  • día de la semana (0-7, 0 y 7 = domingo)


Ejemplo avanzado: diariamente a las 8:30 a.m.

cron.schedule('30 8 * * *', () => {  // Envío de estadísticas matutinas  sendMorningReport();});


Características

  • Soporte de zonas horarias mediante la opción timezone
  • Posibilidad de iniciar y detener tareas
  • Ligero (~20 KB)
  • No es adecuado para lógica compleja con colas


2. node-schedule — planificador flexible con reglas recurrentes

node-schedule proporciona una API más rica: se puede definir la programación mediante objetos, no solo con cadenas cron. Esto es útil para escenarios complejos (por ejemplo, "cada segundo martes del mes a las 15:00").



Instalación

npm install node-schedule


Ejemplo: tarea con expresión cron

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

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


Ejemplo: regla recurrente mediante objeto

const rule = new schedule.RecurrenceRule();rule.dayOfWeek = [1, 3, 5]; // Lun, Mié, Vierule.hour = 10;rule.minute = 30;

schedule.scheduleJob(rule, () => { console.log('Tarea entre semana a las 10:30');});


Ejemplo: ejecución retrasada

const date = new Date(Date.now() + 5000); // dentro de 5 segundosschedule.scheduleJob(date, () => {  console.log('Tarea única dentro de 5 segundos');});


Características

  • Definición flexible de reglas (días de la semana, meses, rangos)
  • Soporte de tareas únicas por fecha
  • Posibilidad de cancelar la tarea: job.cancel()
  • No admite agrupación en clúster ni colas


3. Bull — potente cola con planificador y reintentos

Bull no es solo un planificador, sino un sistema completo de colas basado en Redis. Es ideal para entornos de producción: admite tareas retrasadas, reintentos en caso de error, prioridades y procesamiento paralelo.



Instalación

npm install bull# Requiere Redis instalado


Ejemplo: tarea simple con retraso

const Queue = require('bull');const myQueue = new Queue('myQueue', 'redis://127.0.0.1:6379');

// Añadimos una tarea con un retraso de 1 horamyQueue.add({ email: 'user@example.com' }, { delay: 3600000 });

// ManejadormyQueue.process(async (job) => { console.log(`Enviando correo electrónico para ${job.data.email}`); await sendEmail(job

Recommendations