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-cronEjemplo 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/falseCuá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-scheduleEjemplo 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 objectCuá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 bullEjemplo básico de una cola con una tarea retrasada:
const Queue = require('bull');
const emailQueue = new Queue('email', { redis: { host: 'localhost', port: 63 También en la biblioteca
CORS para JavaScript (Node.js): guía completa con ejemplos
Trabajo con Kafka en Swift (iOS/macOS): bibliotecas, clientes y ejemplos
Trabajo con CSV en TypeScript: bibliotecas, análisis y generación de datos
Trabajo con imágenes en Go (Golang): bibliotecas y ejemplos