Módulo 5: Scheduling y Tiempo

Cron Expressions Avanzadas

Descripción de la cápsula

En M01-03 viste cron básico. Esta cápsula cubre las expresiones que aparecen en negocios reales: cierre de mes contable, último día hábil, primer lunes del trimestre, ventanas de mantenimiento, schedules condicionales. Cada caso con su expression y cuándo necesitarías lógica adicional dentro del workflow.


Lo que vas a aprender

  • ✅ Resolver 12 casos típicos de negocio con cron
  • ✅ Combinar cron con lógica condicional dentro del workflow
  • ✅ Usar Schedule múltiple en un solo workflow
  • ✅ Reconocer cuándo cron solo no alcanza

Caso 1: Cada día laborable a las 9:00

0 9 * * 1-5

Minutos 0, hora 9, días 1-5 (lunes a viernes).

Caso 2: Primer día del mes a las 6am

0 6 1 * *

Caso 3: Último día del mes — limitación de cron

Cron no soporta directamente "último día del mes". Workaround:

0 6 28-31 * *

(Día 28, 29, 30 o 31). Después en el workflow:

// IF: ¿es el último día del mes?
{{ DateTime.now().day === DateTime.now().endOf('month').day }}

Si no es el último, terminar el workflow.

Caso 4: Primer lunes del mes

Cron no soporta directamente. Workaround similar:

0 9 1-7 * 1   // primer lunes posible (días 1-7 + lunes)

Significa: cualquier lunes entre día 1 y 7 = el primer lunes del mes.

Caso 5: Cada 15 minutos de 9-18 los días hábiles

*/15 9-18 * * 1-5

Caso 6: 9am y 6pm de Lunes-Viernes

0 9,18 * * 1-5

(Lista de horas con comas.)

Caso 7: Cuartos de hora en horario de oficina

0,15,30,45 9-18 * * 1-5

O equivalente:

*/15 9-18 * * 1-5

Caso 8: Solo días pares del mes

0 9 */2 * *

(Cada 2 días — no exactamente "días pares" estrictos.)

Caso 9: Trimestral — primer día de Q1, Q2, Q3, Q4

0 6 1 1,4,7,10 *

(Enero, abril, julio, octubre — meses 1, 4, 7, 10.)

Caso 10: Cada 6 meses

0 6 1 */6 *

Cada 6 meses, día 1.

Caso 11: Solo en cierto mes

0 9 * 12 *

Cada día de diciembre a las 9am (ej: campaña navideña).

Caso 12: Madrugada para mantenimiento

0 3 * * *

3am diario (cuando nadie usa el sistema).


Combinar cron con lógica del workflow

Cuando cron no alcanza, combinar con IF dentro del workflow:

Ejemplo: "primer día hábil del mes"

Cron: 0 6 1-3 * *  (días 1, 2 o 3 del mes — para cubrir si día 1 es sábado/domingo)
   │
[Set: calcular]
- is_first_business_day: {{ /* lógica que verifica si es el primer día hábil */ }}
   │
[IF: is_first_business_day]
├─ TRUE → procesar
└─ FALSE → terminar

Ejemplo: "cada día menos holidays"

Cron: 0 9 * * 1-5  (todos los días hábiles)
   │
[HTTP: API de holidays — o Sheet con holidays manuales]
   │
[IF: hoy NO es holiday]
├─ TRUE → procesar
└─ FALSE → log "skip por holiday"

Múltiples Schedule en un workflow

Si necesitas el mismo workflow disparado por horarios distintos:

[Schedule 1: cron 0 6 * * 1-5]  ──┐
                                    ├─→ [procesamiento común]
[Schedule 2: cron 0 18 * * 1-5] ──┘

Ambos triggers ejecutan el mismo workflow (cápsula M01-07).

Alternativa (más limpio para horarios distintos): 1 cron con múltiples horas en el campo hora (0 6,18 * * 1-5 = 6am y 6pm).


Cron NO soporta

NecesidadCron aloneSolución
Último día del mesNoCron + IF en workflow
Primer lunes del mesLimitedCron 1-7 + filter lunes
N-ésimo día hábilNoWorkflow con cálculo
Excluir holidaysNoWorkflow + API/Sheet de holidays
Cada 90 días exactosApproxWorkflow con estado persistente
Días con condición de negocioNoWorkflow con IF inicial

Ejercicio: cron para casos de negocio

Escribe cron para:

  1. Cierre contable mensual (último viernes del mes a las 6pm)
  2. Sync de inventario cada 4 horas, 24/7
  3. Reporte trimestral (primer día del trimestre a las 8am)
  4. Newsletter dominical (domingo 10am)
  5. Maintenance window (sábado 2am)
Respuestas
  1. No directo en cron. Workaround: 0 18 24-31 * 5 (último viernes posible) + IF en workflow.
  2. 0 */4 * * *
  3. 0 8 1 1,4,7,10 *
  4. 0 10 * * 0 (0 = domingo)
  5. 0 2 * * 6 (6 = sábado)

Resumen

  • Cron expressions cubren ~80% de scheduling de negocio
  • 12 patrones típicos documentados
  • Para casos que cron no soporta (último día, primer hábil, sin holidays): combinar cron + IF en workflow
  • Múltiples Schedule en un workflow es posible
  • crontab.guru es tu mejor amigo para validar

Lo que sigue: Timezones management — el detalle que más errores causa en producción.


Creado: Mayo 11, 2026 Versión: 1.0