Explica expresiones cron en lenguaje natural
También podrías necesitar
Las expresiones cron son el mecanismo estándar para programar tareas automáticas en sistemas Unix, Linux, contenedores y plataformas cloud. Una expresión consta de 5 campos separados por espacios: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12) y día de la semana (0-6, donde 0 es domingo). Su sintaxis soporta asteriscos para 'cualquier valor', el operador `/n` para pasos, guiones para rangos y comas para listas de valores específicos. Leer `0 9 * * 1-5` o `*/15 8-17 * * *` a primera vista no es inmediato. Esta herramienta analiza cualquier expresión cron estándar de 5 campos, la traduce a lenguaje natural en español y calcula las próximas 5 ejecuciones con fecha y hora exactas. La sintaxis de 5 campos es compatible con crontab en Linux/macOS, GitHub Actions (campo `on.schedule`), Kubernetes CronJobs y Vercel Cron. AWS EventBridge Scheduler usa un formato diferente de 6 campos: `cron(Minutos Horas Día-del-mes Mes Día-de-la-semana Año)` — el sexto campo es el Año (no los segundos, que es la convención del Quartz Scheduler de Java). Si usás EventBridge, debés adaptar la expresión añadiendo el año al final: por ejemplo `0 9 * * ? *` para todos los años, con `?` en el campo día-de-la-semana cuando ya se especifica el día del mes y viceversa.
¿Qué significa el asterisco `*` en cron?
Significa 'cualquier valor'. Por ejemplo, `*` en el campo de horas equivale a 'cada hora del día'. Puedes usarlo en cualquier campo para indicar 'sin restricción en este campo'.
¿Cómo especifico 'cada N minutos'?
Usa la sintaxis de paso: `*/N`. Por ejemplo, `*/15 * * * *` ejecuta cada 15 minutos, y `*/5 * * * *` cada 5 minutos. El paso también funciona con rangos: `0-30/5` ejecuta en los minutos 0, 5, 10, 15, 20, 25 y 30.
¿Qué es un rango y cómo se usa?
Un rango `n-m` especifica todos los valores de n a m inclusive. Por ejemplo, `1-5` en el campo día de semana ejecuta de lunes a viernes. Los rangos se pueden combinar con pasos: `1-5/2` ejecuta el lunes, miércoles y viernes.
¿Puedo combinar varios valores en un campo?
Sí, con comas: `1,3,5` en día de semana ejecuta el lunes, miércoles y viernes. Puedes mezclar valores, rangos y pasos: `0,30 9-17 * * 1-5` ejecuta a las :00 y :30 de cada hora entre las 9 y las 17, de lunes a viernes.
¿Por qué el día de semana va de 0 a 6?
En la convención Unix clásica, 0 representa el domingo y 6 el sábado. Algunos sistemas (como Vixie cron) también aceptan 7 como domingo. Esta herramienta usa el rango estándar 0-6.
¿Cómo ejecuto una tarea el último día de cada mes?
La sintaxis cron estándar de 5 campos no tiene un operador nativo para 'último día del mes'. La forma más común es `0 9 28-31 * *` (ejecuta del día 28 al 31) y dentro del script verificar si mañana es ya un nuevo mes. Algunos schedulers extendidos como Quartz (Java) y Spring Scheduling sí tienen el operador `L`: `0 9 L * ?`. En Linux/macOS, una alternativa es `$(date -d tomorrow +%d)` para detectar el cambio de mes desde el script.
¿Por qué mi tarea con `on.schedule` en GitHub Actions no ejecuta a la hora exacta?
GitHub Actions no garantiza ejecución puntual en los horarios `on.schedule`. Según la documentación oficial de GitHub, los workflows programados pueden retrasarse durante períodos de alta carga en la infraestructura — especialmente en los minutos :00 de cada hora, que son los más congestionados. Para cargas de trabajo que requieren precisión temporal, GitHub recomienda usar un scheduler externo dedicado como AWS EventBridge. Tené en cuenta además que `on.schedule` puede deshabilitarse automáticamente en repositorios sin actividad en los últimos 60 días.