La sintaxis de cron explicada, campo por campo
Una guía práctica para leer y escribir expresiones cron — los cinco campos, los operadores, recetas habituales y la trampa de las zonas horarias.
Las expresiones cron parecen crípticas, pero siguen una gramática pequeña y
aprendible. Una vez que puedes leer los cinco campos y los cuatro operadores,
30 4 1,15 * * deja de ser un enigma. Esta es una guía práctica — y hay una
herramienta explicadora gratuita si prefieres
pegar una expresión directamente y ver qué hace.
Los cinco campos
Una expresión cron estándar tiene cinco campos separados por espacios:
┌───────────── minute (0 - 59)
│ ┌─────────── hour (0 - 23)
│ │ ┌───────── day of month (1 - 31)
│ │ │ ┌─────── month (1 - 12)
│ │ │ │ ┌───── day of week (0 - 6, Sunday = 0)
│ │ │ │ │
* * * * *
De izquierda a derecha: minuto, hora, día del mes, mes, día de la semana.
Los cuatro operadores
*— cualquier valor.* * * * *significa cada minuto.,— una lista.1,15en el campo día del mes significa el 1 y el 15.-— un rango.9-17en el campo hora significa de las 09:00 a las 17:00./— un paso.*/15en el campo minuto significa cada 15 minutos.
Se combinan libremente: 0 9-17 * * 1-5 es “a la hora en punto, de 9 a 17, los días laborables.”
Recetas que realmente usarás
| Expresión | Significado |
|---|---|
*/15 * * * * | Cada 15 minutos |
0 9 * * 1-5 | Días laborables a las 09:00 |
30 4 1,15 * * | A las 04:30 los días 1 y 15 |
0 */4 * * * | Cada 4 horas |
0 2 * * * | A diario a las 02:00 |
0 0 * * 0 | Los domingos a medianoche |
La trampa del día del mes / día de la semana
Si estableces ambos campos —día del mes y día de la semana— con valores distintos
de *, la mayoría de las implementaciones cron los tratan como O, no como Y.
0 0 13 * 5 no significa “viernes 13” — significa “el día 13 de cualquier mes,
y también todos los viernes.” Deja uno de los dos como * a menos que realmente
quieras la unión.
La trampa de las zonas horarias
La mayor fuente de sorpresas con cron no es la sintaxis — es la hora. El cron del servidor suele correr en UTC, pero tú piensas en hora local, y dos veces al año el horario de verano desplaza el reloj. Un trabajo definido para “09:00” en un crontab en UTC se desplaza una hora cada primavera y otoño respecto a tu oficina.
La solución es planificar en una zona horaria real y dejar que el planificador
gestione el cambio de horario. SteadyCron asigna a cada job su propia zona horaria
IANA (como Europe/Berlin) y mantiene “09:00 todos los días laborables” a las
09:00 hora local, todo el año.
Pruébalo
Pega cualquier expresión en el explicador de expresiones cron para verla en lenguaje sencillo y previsualizar las próximas ejecuciones en tu zona horaria — luego planifícala en SteadyCron con retries y alertas.