Explicar una expresión cron
Lee una programación de crontab en palabras simples y obtén la lista de sus próximas ejecuciones, en cualquier zona horaria.
Funciona completamente en tu navegador
- Minuto
- Hora
- Día del mes
- Mes
- Día de la semana
Próximas ejecuciones
Cron estándar de cinco campos (minuto, hora, día del mes, mes, día de la semana), como en Vixie cron, cronie y la mayoría de los sistemas Linux, además de atajos tipo @daily. Quartz y otros formatos con campo de segundos se detectan, pero no se explican.
Cómo revisar una expresión cron
- Escribe o pega los cinco campos de la programación, como
*/15 9-17 * * 1-5, o elige un ejemplo. También funciona una línea completa de crontab; el comando después del quinto campo se ignora. - Lee el resumen en palabras simples y el desglose de cada campo. Si hay un error, se señala en el campo donde ocurre.
- Revisa la lista de próximas ejecuciones. Elige la zona horaria en la que corre el servidor, y otra hora de inicio si quieres mirar más adelante.
Cómo leer una programación cron
Para entender una expresión cron hay que saber cómo la evalúa cron: revisa su tabla una vez por minuto y ejecuta cada tarea cuyos cinco campos coinciden con la hora actual, con una excepción para los dos campos de día que se describe más abajo. Así, */15 9-17 * * 1-5 significa: en los minutos 0, 15, 30 y 45, de las 9 a las 17 horas, cualquier día del mes, en cualquier mes, de lunes a viernes. La última ejecución del día es a las 17:45, porque el campo de hora cubre toda la hora 17.
El explicador analiza cada campo como lo hacen Vixie cron y cronie, que es lo que incluyen la mayoría de las distribuciones Linux. Los nombres de meses y días de la semana se aceptan en mayúsculas o minúsculas, y 7 cuenta como domingo. Un paso después de un solo número, como 5/10, se lee como 5-59/10, igual que en muchas versiones de cron; algunas más antiguas lo rechazan, así que la herramienta te recuerda escribir el rango completo. Los rangos deben ir de menor a mayor: FRI-MON se señala en lugar de darle la vuelta, porque el cron estándar no da la vuelta a los rangos.
Las próximas ejecuciones se calculan recorriendo el calendario en la zona horaria que elijas, así que una expresión que solo puede coincidir el 29 de febrero encuentra de inmediato el próximo año bisiesto, y una que nunca puede coincidir, como 0 0 31 2 *, se informa como que nunca se ejecuta.
Consejos
- Convierte una hora de ejecución de un log en un timestamp Unix, o al revés, con el Conversor de timestamp Unix.
- ¿Pruebas el patrón que usa una tarea para filtrar su log? Usa el Probador de regex.
- Revisa cómo se ve una configuración JSON con programaciones usando Formatear y validar JSON.
Preguntas frecuentes
¿Qué significan los cinco campos?
En orden: minuto (0-59), hora (0-23), día del mes (1-31), mes (1-12 o JAN-DEC) y día de la semana (0-7 o SUN-SAT, donde tanto 0 como 7 son domingo). Cada campo acepta un solo valor, una lista como 1,15, un rango como 9-17, un paso como */15 o 0-30/10, o * para todos los valores.
¿Por qué mi tarea se ejecuta más días de lo que esperaba?
Cuando tanto el campo de día del mes como el de día de la semana están restringidos, cron se ejecuta los días que coinciden con cualquiera de los dos, no con ambos. 0 9 1 * 1 se ejecuta el día 1 de cada mes y todos los lunes. Así se comportan Vixie cron y cronie. Una peculiaridad de la misma regla: un campo que empieza con *, como */2, cuenta como no restringido, y entonces deben coincidir ambos campos.
¿Qué zona horaria usa cron?
La de la máquina o el contenedor donde se ejecuta, salvo que el crontab defina CRON_TZ o TZ. Muchos servidores funcionan en UTC, así que compruébalo antes de fiarte de las horas que ves. Elige la zona del servidor en la lista para ver sus horas de ejecución.
¿Qué pasa cuando cambia la hora por el horario de verano?
La lista sigue el reloj de la zona que elijas: una hora que se salta cuando los relojes se adelantan queda fuera, y una hora que ocurre dos veces cuando se atrasan aparece una sola vez. Vixie cron y cronie ejecutan una tarea programada en una hora saltada poco después del cambio y no repiten tareas en la hora repetida; otros programadores varían. Aparece una nota cuando un período de la lista incluye un cambio.
¿Admite segundos o la sintaxis de Quartz?
No. Las expresiones con seis o siete campos, o con ?, L, W o #, vienen de Quartz, Spring y programadores similares, donde el primer campo son los segundos. La herramienta lo indica en lugar de adivinar, porque leerlas como cron estándar daría una programación incorrecta.
¿Qué significan @daily, @hourly y los demás atajos?
@hourly es 0 * * * *, @daily y @midnight son 0 0 * * *, @weekly es 0 0 * * 0, @monthly es 0 0 1 * *, y @yearly y @annually son 0 0 1 1 *. @reboot se ejecuta una vez al iniciar el servicio cron, así que no tiene horas que listar.