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
| Necesidad | Cron alone | Solución |
|---|---|---|
| Último día del mes | No | Cron + IF en workflow |
| Primer lunes del mes | Limited | Cron 1-7 + filter lunes |
| N-ésimo día hábil | No | Workflow con cálculo |
| Excluir holidays | No | Workflow + API/Sheet de holidays |
| Cada 90 días exactos | Approx | Workflow con estado persistente |
| Días con condición de negocio | No | Workflow con IF inicial |
Ejercicio: cron para casos de negocio
Escribe cron para:
- Cierre contable mensual (último viernes del mes a las 6pm)
- Sync de inventario cada 4 horas, 24/7
- Reporte trimestral (primer día del trimestre a las 8am)
- Newsletter dominical (domingo 10am)
- Maintenance window (sábado 2am)
Respuestas
- No directo en cron. Workaround:
0 18 24-31 * 5(último viernes posible) + IF en workflow. 0 */4 * * *0 8 1 1,4,7,10 *0 10 * * 0(0 = domingo)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