Expresiones Cron: Programa Cualquier Cosa Sin Adivinar
Esas cadenas de programación crípticas finalmente explicadas. Escribe expresiones cron que funcionen a la primera.
0 0 * * * — ¿qué significa eso?
Si has usado AWS Lambda, GitHub Actions o cualquier programador de tareas, has visto expresiones cron. Cinco o seis campos crípticos que de alguna manera programan trabajos.
No son tan complicados como parecen.
Los Cinco Campos
┌───────────── minuto (0 - 59)
│ ┌───────────── hora (0 - 23)
│ │ ┌───────────── día del mes (1 - 31)
│ │ │ ┌───────────── mes (1 - 12)
│ │ │ │ ┌───────────── día de la semana (0 - 6, Domingo = 0)
│ │ │ │ │
* * * * *
Cada campo limita cuándo se ejecuta el trabajo. Un * significa "cada". Un número significa "solo ese valor".
Leyendo Ejemplos
0 0 * * * — Minuto 0, hora 0, cualquier día, cualquier mes, cualquier día de semana = Medianoche cada día
30 8 * * 1-5 — 8:30 AM, lunes a viernes = Mañanas entre semana
0 */2 * * * — Cada 2 horas = 2 AM, 4 AM, 6 AM...
0 9 1 * * — 9 AM el 1ro de cada mes = Hora del reporte mensual
Caracteres Especiales
* — Cada valor (cada minuto, cada hora, etc.)
, — Múltiples valores. 1,15 significa el 1ro y el 15.
- — Rango. 1-5 significa del 1 al 5.
/ — Paso. */15 significa cada 15. */15 en el campo de minutos = cada 15 minutos.
Patrones Comunes
Cada 5 minutos: */5 * * * *
Cada hora a los :30: 30 * * * *
Diario a las 3 AM: 0 3 * * *
Semanal el domingo a medianoche: 0 0 * * 0
Primer día del mes a las 9 AM: 0 9 1 * *
Entre semana a las 6 PM: 0 18 * * 1-5
Los Problemas
Día de la semana vs día del mes. Si configuras ambos, la mayoría de sistemas los combinan con OR. 0 0 1 * 1 se ejecuta el 1ro Y cada lunes, no solo lunes que son el 1ro.
La zona horaria importa. La mayoría de sistemas cron usan hora del servidor o UTC. Debes saber cuál estás usando.
6 campos vs 5 campos. Algunos sistemas agregan un campo de segundos al principio. 0 0 0 * * * sería medianoche con un campo de segundos.
Domingo = 0 o 7. Depende del sistema. Ambos usualmente funcionan para domingo.
Probando Antes de Desplegar
No adivines si 0 0 */2 * * se ejecuta cada 2 días o cada 2 horas. Usa un analizador de cron.
Revisa algunos tiempos de activación esperados. Asegúrate de que coincidan con tu intención.
Para trabajos críticos, configura monitoreo. Una expresión cron que está mal por un campo puede ejecutar tu trabajo diario cada hora, o tu trabajo por hora anualmente.
Alternativas a Cron
Sintaxis en inglés. Algunos programadores aceptan "every day at 3pm" en lugar de 0 15 * * *. Más claro pero menos portable.
Expresiones de tasa. AWS usa rate(5 minutes) junto con expresiones cron. Más fácil para intervalos simples.
Timers de systemd. Alternativa Linux a cron con mejor registro y gestión de dependencias.
Las expresiones cron son densas pero aprendibles. Cinco campos, cada uno limitando cuándo se ejecutan los trabajos. Prueba tus expresiones, vigila tus zonas horarias y programarás cualquier cosa confiablemente.