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-cronEjemplo: 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-scheduleEjemplo: 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 instaladoEjemplo: 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 También en la biblioteca
Trabajo con CSV en C++: bibliotecas, análisis y escritura de datos
Jetpack Compose para Kotlin: guía completa con ejemplos
Generación de PDF en Swift (iOS/macOS): resumen de herramientas y ejemplos
Trabajo con imágenes en TypeScript: bibliotecas, herramientas y ejemplos de código