Escribir expresiones cron que no disparan sorpresas
Los cinco campos y sus rangos, nombres frente a números, la trampa OR entre día del mes y día de la semana, el domingo como 0 o 7, huecos y solapamientos del horario de verano, y la validación con una vista previa de próximas ejecuciones antes de desplegar.
Cinco campos, leídos de izquierda a derecha
Una expresión cron clásica son cinco 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–7). Cada campo acepta un valor único, una lista separada por comas, un rango con guion, un paso tras una barra o un asterisco para todos los valores.
La mayoría de los errores de cron no son sintaxis exótica sino un campo corriente leído con descuido: un paso que se reinicia en el límite del rango, o un campo de hora escrito para un reloj de doce horas en un sistema que cuenta hasta veintitrés.
- ListasLas listas eligen valores discretos: 0,30 en el campo de minuto se dispara en punto y a la media.
- Rangos y pasosLos rangos eligen un intervalo: 9-17 en el campo de hora cubre el horario laboral, y un paso lo adelgaza—9-17/2 se dispara cada dos horas dentro del intervalo.
- El asterisco lo cubre todoEl asterisco no es “ignora este campo”; coincide activamente con todos los valores, lo que se vuelve importante en cuanto interactúan dos campos de día.
Los nombres son números con mejor documentación
Los campos de mes y día de la semana aceptan nombres ingleses de tres letras—de JAN a DEC y de SUN a SAT—como alias de sus números. 0 9 * JAN MON y 0 9 * 1 1 son el mismo horario, pero la versión con nombres se explica sola al siguiente lector y resiste las ediciones de uno-de-más.
- Sin distinción de mayúsculasLos nombres se analizan sin distinguir mayúsculas—mon, Mon y MON funcionan—pero las mayúsculas son la convención que se lee como intencionada.
- Nombres en rangosLos nombres también funcionan dentro de rangos y listas: MON-FRI es el intervalo laboral estándar, y JAN,APR,JUL,OCT elige los meses trimestrales.
- Lee la explicaciónGenerador e intérprete de Cron normaliza la expresión y explica cada campo por separado—“month: every value”, “weekday: 1, 2, 3, 4, 5”—para que confirmes que el analizador leyó los nombres como tú quisiste.
Cómo interactúan los dos campos de día
Esta herramienta sigue las reglas de días de estilo Vixie: si ninguno de los dos campos de día empieza por *, basta con que coincida uno. 0 9 13 * FRI no significa «viernes 13», sino el día 13 de cada mes y todos los viernes.
La salida del explicador es explícita sobre esto: informa de la semántica como dom-dow-or junto a las ejecuciones calculadas, así que una expresión que se disparará mucho más a menudo de lo previsto muestra su juego antes de llegar a un crontab.
- Los pasos con comodín siguen limitandoSi un campo de día empieza por *, incluso con un paso como */2, esta herramienta exige que coincidan ambos campos; la restricción del paso sigue vigente.
- Sin comodín inicial se aplica ORSi ningún campo de día empieza por *, esta herramienta aplica OR: puede coincidir el día del mes o el de la semana.
- AND necesita un rodeoPara acertar un auténtico viernes 13, deja que cron seleccione el día 13 y haz que el propio comando compruebe el día de la semana—o usa un planificador con semántica AND, que el cron clásico no es.
El domingo es 0, y normalmente también 7
El campo de día de la semana numera el domingo como 0, el lunes como 1 y así hasta el sábado como 6. La mayoría de las implementaciones también aceptan 7 como segundo domingo para quienes cuentan desde el lunes—el analizador de Toolars normaliza 7 a 0 internamente—pero algunos sistemas solo aceptan uno de los dos, y en otros lugares existe la numeración estilo ISO que empieza el lunes en 1.
- 0 y 70 y 7 son ambos domingo donde se acepta 7; escribir 0 es la opción portable entre planificadores.
- Uno-de-más silenciosoUn día 7 en un sistema que lo rechaza falla ruidosamente al desplegar, pero un día mal leído como “séptimo día contando desde el lunes” falla en silencio el día equivocado.
- Reconfirma por plataformaCuando una expresión se mueve entre implementaciones—crontab del sistema, una plataforma de contenedores, un planificador de CI—vuelve a confirmar la numeración de días en lugar de asumir que sobrevivió al viaje.
El horario de verano tuerce el horario
Los cambios de horario de verano crean minutos locales inexistentes o repetidos. Esta vista previa omite una hora inexistente como las 02:30 al adelantar el reloj y enumera dos veces un minuto coincidente al atrasarlo. Un planificador real puede recuperar una ejecución perdida o suprimir una duplicada; comprueba su política.
- La hora perdidaSalto de primavera: la vista previa no encuentra ningún minuto 02:30; algunos planificadores ejecutan la tarea perdida después del cambio.
- La hora duplicadaSolapamiento de otoño: la vista previa puede mostrar ambos instantes coincidentes, mientras que un planificador real puede suprimir la segunda ejecución.
- UTC no tiene DSTLa salida limpia es UTC: no tiene transiciones de horario de verano, así que 30 2 * * * significa el mismo instante todos los días del año. El explicador ofrece UTC, la zona local del dispositivo y zonas con nombre como America/New_York y Europe/London.
Valida con las próximas ejecuciones, no con esperanza
La diferencia entre una expresión correcta y una de aspecto plausible es una lista de instantes de disparo concretos. Generador e intérprete de Cron calcula las próximas diez ejecuciones desde ahora en la zona horaria que elijas, buscando hasta 366 días adelante, y evalúa en un worker en segundo plano para que una expresión pesada no pueda atascar la pestaña.
- Lee las ejecucionesLee las primeras ejecuciones contra la intención: “laborables a las 09:00” debería mostrar de lunes a viernes a las nueve, y un sábado en la lista es la trampa OR delatándose.
- Cruza una transiciónSelecciona una zona horaria con nombre y revisa las próximas ejecuciones si el siguiente cambio horario cae dentro de la vista previa de 366 días. La herramienta parte del momento actual; no permite elegir una fecha inicial personalizada.
- Errores explícitosLas expresiones inválidas producen errores. Si no hay coincidencias en 366 días, aparece un error por límite de búsqueda; de una a nueve coincidencias devuelven un resultado parcial, no una lista vacía.
Preguntas frecuentes
¿Por qué se ejecutó mi cron en días que no esperaba?
¿Es domingo 0 o 7 en cron?
¿Cómo hago un horario inmune al horario de verano?
Los horarios y los patrones comparten una disciplina.
Ambos son cadenas diminutas con un radio de daño desmedido—aprende el bucle escribir-probar-refactorizar para expresiones regulares, ejecutado en un worker local con tiempo límite.