Expresión cron explicada
La herramienta funciona en los dos sentidos: escribe una programación en formato crontab para verla explicada, o descríbela con palabras para obtener la expresión.
Cinco campos: minuto, hora, día del mes, mes y día de la semana. Puede ir primero un sexto campo para los segundos.
Ejemplos
Significa
Cada 15 minutos de 5 a 59, durante las horas 9–17, cada lunes–viernes
Campo por campo
| Campo | Expresión | Valores |
|---|---|---|
| Minuto | 5-59/15 | 5, 20, 35, 50 |
| Hora | 9-17 | 9, 10, 11, 12, 13, 14, 15, 16, 17 |
| Día del mes | * | todos |
| Mes | * | todos |
| Día de la semana | MON-FRI | lunes, martes, miércoles, jueves, viernes |
Próximas ejecuciones
…
El horario de verano se trata como en Vixie cron y cronie: una hora fija se ejecuta una vez aunque la hora se salte o se repita, mientras que las tareas con * en los minutos o las horas siguen el nuevo reloj.
Cómo funciona
Una expresión cron tiene 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, donde tanto 0 como 7 son domingo). Cada minuto, cron comprueba si el reloj coincide con todos los campos y, si es así, inicia la tarea.
En cada campo, * significa todos los valores, 1-5 un rango, 1,15 una lista y */15 uno de cada quince valores. Los pasos también se pueden combinar con rangos: 5-59/15 da los minutos 5, 20, 35 y 50. Los meses y los días de la semana se pueden escribir con abreviaturas en inglés, JAN–DEC y SUN–SAT.
Cuando están restringidos tanto el día del mes como el día de la semana, basta con que coincida uno de los dos. Por eso 0 0 13 * 5 se ejecuta el día 13 de cada mes y todos los viernes, no solo los viernes 13. La regla viene de Vixie cron y se aplica en la mayoría de los sistemas Linux. Si alguno de los dos campos empieza por *, aunque sea con un paso como */2, deben coincidir ambos.
Las macros @hourly, @daily, @weekly, @monthly y @yearly (o @annually) son atajos para programaciones habituales, y @reboot ejecuta la tarea una vez cuando inicia cron. Un sexto campo para los segundos al principio, ? para “cualquier día” y L para el último día del mes proceden de Quartz, Spring y programadores similares, y el crontab normal no los entiende.
Cron sigue la hora local de la computadora. Cuando empieza el horario de verano y el reloj salta de las 02:00 a las 03:00, una tarea con una hora fija dentro de la hora saltada se ejecuta justo después del cambio, y cuando se atrasa el reloj se ejecuta solo una vez. Las tareas con * en el campo de los minutos o de las horas siguen en cambio el nuevo reloj. La lista de esta página funciona igual, en tu zona horaria o en UTC.
Comprueba qué implementación ejecuta tu programación. Los servicios en la nube suelen tener sus propias variantes: AWS EventBridge, por ejemplo, tiene seis campos con el año al final y exige ? en el día del mes o en el día de la semana, y muchos servicios trabajan en UTC y no en hora local.
En sentido contrario, puedes describir la programación con palabras: “cada lunes a las 9”, “cada 15 minutos”, “el primer día del mes a las 2:30”, “de lunes a viernes a las 6 p.m.” o “el último día del mes a medianoche”. Las horas se leen como 9, 9.30, 9:30, 09h30 y 9 a.m., los rangos como 9–17 y las listas como 1, 15. Si se entiende la frase, la expresión aparece al instante, y la explicación de arriba dice con palabras qué significa, para que veas si es lo que querías. Si no se entiende, se indican las palabras que no se pudieron leer, en lugar de adivinar.
El generador que está debajo del cuadro de texto hace lo mismo con controles en lugar de palabras, y los dos van a la par: una frase llena los controles, y cada cambio en los controles reescribe la expresión. No todo se puede expresar en cron. En el crontab normal no hay forma de decir “el primer lunes del mes” ni “cada dos semanas”, y dos horas distintas en la misma frase (a las 9 y a las 17) se escriben como una lista en el campo de las horas: 0 9,17 * * *.