Planificador de tareas en TypeScript: guía completa sobre bibliotecas cron y temporizadores

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 TypeScript: guía completa



Un planificador de tareas (task scheduler) es una herramienta que permite ejecutar funciones o scripts en un momento determinado o con una periodicidad específica. En el ecosistema de TypeScript existen varias bibliotecas maduras para implementar estos escenarios: desde temporizadores simples hasta potentes sistemas cron. En este artículo analizaremos los enfoques principales y mostraremos cómo utilizarlos en proyectos reales.



¿Para qué sirve un planificador de tareas?

La automatización de acciones repetitivas es una tarea clave en cualquier aplicación de servidor. Escenarios típicos:

  • Envío de notificaciones por correo electrónico cada hora.
  • Limpieza de archivos temporales cada noche.
  • Recopilación de análisis al final del día.
  • Actualización de caché según un horario.

En TypeScript (y JavaScript) existe un mecanismo básico incorporado: setInterval y setTimeout, pero para horarios complejos es más conveniente utilizar bibliotecas especializadas.



Herramientas integradas: setInterval y setTimeout

La forma más sencilla es usar funciones globales:

// Ejemplo: ejecutar cada 5 segundosconst intervalId = setInterval(() => {  console.log('Tarea ejecutada a las', new Date().toISOString());}, 5000);

// Detener después de 30 segundossetTimeout(() => { clearInterval(intervalId); console.log('Planificador detenido');}, 30000);

Ventajas: no requiere instalación, funciona en cualquier entorno. Desventajas: no admite expresiones cron, es difícil gestionar tareas omitidas.



Biblioteca node-cron

Una de las bibliotecas más populares para Node.js. Funciona con el formato cron clásico (5 campos): minutos, horas, día del mes, mes, día de la semana.



Instalación

npm install node-cronnpm install @types/node-cron


Ejemplo de uso

import * as cron from 'node-cron';

// Tarea: cada minutocron.schedule('* * * * *', () => { console.log('Ejecución cada minuto');});

// Tarea: cada día a las 9:30 a.m.cron.schedule('30 9 * * *', () => { console.log('Tarea diaria a las 9:30');});

// Tarea: entre semana a las 18:00cron.schedule('0 18 * * 1-5', () => { console.log('Entre semana a las 18:00');});


Gestión de tareas

import * as cron from 'node-cron';

const task = cron.schedule('*/5 * * * *', () => { console.log('Cada 5 minutos');});

// Detener la tareatask.stop();

// Reanudartask.start();

// Verificar estadoconsole.log(task.isActive()); // true o false


Biblioteca croner

Una alternativa más moderna, escrita desde cero en TypeScript. Admite sintaxis extendida (segundos, nombres de meses) y funciona tanto en Node.js como en el navegador.



Instalación

npm install croner


Ejemplo con segundos

import Cron from 'croner';

// Cada 10 segundosconst job = new Cron('*/10 * * * * *', () => { console.log('Ejecución cada 10 segundos');});

// Tarea: cada lunes a las 8:30 a.m.const weeklyJob = new Cron('30 8 * * 1', () => { console.log('Lunes, 8:30');});

// Detener después de 1 minutosetTimeout(() => { job.stop(); console.log('Tarea detenida');}, 60000);


Funcionalidades avanzadas

import Cron from 'croner';

// Tarea con nombre y zona horariaconst job = new Cron('0 9 * * *', { name: 'morning-report', timezone: 'Europe/Moscow'}, () => { console.log('Informe matutino de Moscú');});

// Obtener la próxima hora de ejecuciónconst nextRun = job.nextRun();console.log('Próxima ejecución:', nextRun.toISOString());

// Lista de todas las tareas activasconst activeJobs = Cron.getJobs();console.log('Tareas activas:', activeJobs.length);


Comparación entre node-cron y croner

  • node-cron — una biblioteca probada por el tiempo

Recommendations