Cómo leer una expresión cron, campo por campo
Una expresión cron es una línea corta de texto que indica a un programador de tareas cuándo ejecutar un trabajo. La forma habitual tiene cinco campos separados por espacios: minuto, hora, día del mes, mes y día de la semana. La línea 0 9 * * 1-5 significa de lunes a viernes a las 09:00. Cada campo es un número, un nombre, una lista, un rango o un paso, o * para todos los valores, y un trabajo se ejecuta en cada momento en que coinciden todos los campos.
Los cinco campos
| Campo | Valores permitidos | Ejemplo |
|---|---|---|
| Minuto | 0 a 59 | 30 es el minuto 30 de la hora |
| Hora | 0 a 23 | 9 son las 09:00, en formato de 24 horas |
| Día del mes | 1 a 31 | 15 es el día 15 |
| Mes | 1 a 12, o JAN a DEC | 3 o MAR es marzo |
| Día de la semana | 0 a 6, o SUN a SAT | 0 o SUN es domingo, 1 es lunes |
Algunos sistemas también aceptan 7 para el domingo, pero no todos, así que usa 0 o SUN. Cron no tiene campo de segundos en esta forma, así que el paso más pequeño es de un minuto.
Listas, rangos, pasos y nombres
significa todos los valores del campo.* * * *se ejecuta cada minuto.- Una lista usa comas.
0 9,17 * * *se ejecuta a las 09:00 y a las 17:00 todos los días. - Un rango usa un guion.
1-5en el campo de día de la semana significa de lunes a viernes. - Un paso usa una barra.
*/15en el campo de minuto significa 0, 15, 30 y 45.10-30/5significa 10, 15, 20, 25 y 30. - Los nombres, como
MON-FRI, pueden sustituir a los números. Son más fáciles de leer, si tu programador los acepta.
Estas partes se combinan. 0 8-18/2 * * * se ejecuta en el minuto 0 de cada dos horas, de 08:00 a 18:00.
Horarios habituales
| Expresión | Significado |
|---|---|
* * * * * | Cada minuto |
/15 * * * | Cada 15 minutos |
0 * * * * | En el minuto 0 de cada hora |
0 2 * * * | Todos los días a las 02:00 |
0 9 * * 1-5 | 09:00, de lunes a viernes |
0 9,17 * * * | 09:00 y 17:00 todos los días |
30 6 1 * * | 06:30 el día 1 de cada mes |
0 0 * * 0 | Medianoche todos los domingos |
0 0 1 1 * | Medianoche del 1 de enero |
/5 9-17 * 1-5 | Cada 5 minutos de 09:00 a 17:55, de lunes a viernes |
Ten en cuenta que 0 0 * * es medianoche, y 0 12 * * es mediodía. Equivocarse con la hora es uno de los errores más comunes.
Día del mes y día de la semana
Cuando tanto el campo de día del mes como el de día de la semana están restringidos, el trabajo se ejecuta cuando coincide cualquiera de los dos. Es la regla clásica de Vixie cron y de muchos sistemas derivados de él. Así, 0 0 13 * 5 se ejecuta a medianoche el día 13 de cada mes y también todos los viernes. Mucha gente espera solo el viernes 13, y acaba con más ejecuciones de las previstas.
Si uno de los dos campos es *, solo cuenta el otro. Para ejecutar en viernes 13, programa un trabajo para cada viernes y comprueba la fecha dentro del script. Otros programadores, incluidos algunos servicios en la nube, pueden usar reglas distintas, así que lee su documentación.
Zonas horarias y horario de verano
Cron funciona según el reloj de la máquina o del servicio en el que se ejecuta, que normalmente es la zona horaria local de esa máquina. Un trabajo programado para las 02:30 se ejecuta a las 02:30 de ese reloj. Comprueba primero la zona (en Linux, date la muestra). Si quieres que los trabajos sigan un mismo reloj en todas partes, muchos equipos usan servidores en UTC, y algunos programadores permiten definir una zona horaria para cada trabajo.
El horario de verano cambia el reloj dos veces al año. En primavera, muchos lugares pasan de las 02:00 directamente a las 03:00, así que un trabajo a las 02:30 no tiene tiempo de ejecutarse. En otoño, la hora de 01:00 a 01:59 se repite dos veces. Los programadores tratan estos casos de forma distinta: algunos omiten el trabajo, otros lo ejecutan una vez y otros dos veces. Evita programar trabajos en la franja de cambio de la madrugada, o usa UTC, si la diferencia te importa.
Seis campos y Quartz
Algunos programadores añaden un campo de segundos al principio, así que /10 * * * * se ejecuta cada 10 segundos. El programador Quartz para Java usa segundos, minutos, horas, día del mes, mes, día de la semana y un año opcional, y añade cuatro caracteres especiales:
?significa «ningún valor específico». Quartz lo exige en el campo de día del mes o en el de día de la semana, el que no uses.Lsignifica último.Len el campo de día del mes es el último día del mes, y6Len el de día de la semana es el último viernes.Wsignifica el día laborable más cercano.15Wes el día laborable más próximo al 15, y no salta a otro mes.#significa el n-ésimo día de la semana.6#3es el tercer viernes.
Quartz numera los días de forma distinta a la forma de cinco campos. Su 1 es domingo y 7 es sábado, así que de lunes a viernes es 2-6, no 1-5. Comprueba siempre qué formato usa tu programador antes de copiar una línea.
Errores habituales
*/7en el campo de minuto. Los valores son 0, 7, 14 y así hasta 56. El siguiente sería 63, que no existe, así que la ejecución posterior a 56 es en el minuto 0 de la hora siguiente. La separación es solo de cuatro minutos, y el espaciado es irregular. Usa un paso que divida 60 exactamente, como 5, 10, 15 o 30.- Febrero 30. Esa fecha no existe, así que
0 0 30 2 *nunca se ejecuta. Lo mismo pasa con el día 31 en un mes de 30 días. Con la regla de «uno u otro», una restricción de día de la semana puede seguir provocando ejecuciones en otros días, así que comprueba el resultado. - Hora 24 o minuto 60. Están fuera de rango. La mayoría de programadores los rechazan al guardar, pero no todos.
- Esperar segundos. Una línea de cinco campos solo se ejecuta en minutos completos.
- Confundir cron con las expresiones regulares. En cron,
significa todos los valores. En una expresión regular,significa repetir el elemento anterior. Usa el Probador de expresiones regulares para los patrones, y mantén las líneas cron separadas.
Comprueba las próximas ejecuciones
Antes de fiarte de un horario, lee la línea en palabras sencillas y anota sus próximas horas de ejecución. El Explicador de cron hace ambas cosas, y es la forma más rápida de detectar la regla de «uno u otro» o un paso extraño.
Respuestas rápidas
¿El primer campo son minutos o segundos?
Minutos, en la forma estándar de cinco campos. Solo algunos programadores de seis campos añaden segundos, y los colocan primero.
¿Por qué mi trabajo se ejecuta los viernes y también el día 13?
Están configurados los campos de día del mes y de día de la semana, así que el trabajo se ejecuta cuando coincide cualquiera de los dos. Pon uno de los campos en * si quieres solo el otro.
¿Cron usa UTC?
Solo si la máquina o el servicio está configurado en UTC. Si no, usa la zona horaria local de ese sistema.
Traducido del Original en inglés con ayuda de IA.
Comentarios
Aún no hay comentarios. Sé el primero.


