Saltar al contenido
← Volver a proyectos

~/proyectos

cron-scheduler-ts

Scheduler cron/intervalo en memoria para Node.js: cero dependencias, TypeScript completo, persistencia pluggable, deteccion de jobs perdidos y cero drift gracias a recalculo monotono del proximo tick.

Node.jsTypeScript

problema

Necesitaba un scheduler tipo cron para tareas recurrentes en proyectos Node.js sin depender de node-cron o agenda. Las opciones existentes o arrastran dependencias de runtime, o acumulan drift al reprogramar desde el fire anterior, o no detectan jobs que se perdieron mientras el proceso estuvo caido.

arquitectura

Modulo ESM/CJS con zero runtime deps. Cada job tiene su propio setTimeout que recalcula el siguiente tick desde new Date() en cada disparo, eliminando drift. Parser cron escrito a mano (5/6 campos, rangos, pasos, aliases, tokens de mes y dia). StorageAdapter pluggable con implementaciones en memoria y filesystem (escritura atomica via .tmp + rename). Persistencia coalescente para no saturar disco en jobs frecuentes.

decisiones

  • Per-job setTimeout en vez de tick global: cada reprogramacion recomputa desde el reloj actual, lo que hace imposible el drift acumulado.
  • Parser cron zero-dep escrito a mano: soporta los formatos de uso real (5/6 campos, */n, rangos, listas, aliases @daily, tokens jan-dec / sun-sat) sin engordar el bundle.
  • StorageAdapter como interfaz minima: cualquier backend (file, SQLite, Postgres, Redis) cumple el contrato sin acoplar el core a un driver.
  • Deteccion de jobs perdidos al arrancar: si lastRun + intervalo es menor que ahora, se emite missed sin replay y el job se reprograma al siguiente tick futuro.
  • Escritura atomica en FileSystemAdapter: write a .tmp + rename, para evitar corrupcion si el proceso muere a mitad de save.

diagramas

// ciclo de un job

// estructura interna

// deteccion de jobs perdidos

enlaces