Saltar al contenido

Sintaxis de expresiones cron

Una expresión cron es cinco campos que describen cuándo debe ejecutarse algo. Cada campo dice qué valores de su unidad son aceptables, y el trabajo se ejecuta en cada minuto donde todos cinco coinciden. Ese es el modelo completo: no hay noción de duración, no hay "cada 90 minutos", y no hay estado de siguiente ejecución guardado en ningún lugar.

Los campos se leen de izquierda a derecha como minuto, hora, día del mes, mes, día de la semana. Los ejemplos al final son los que la gente realmente alcanza, y cada uno es procesado por el analizador cron del sitio antes de que se construya esta página.

La última sección enumera la sintaxis que se parece a cron pero no se acepta aquí: extensiones de Quartz y Jenkins, y la forma de seis campos con segundos. Vale la pena reconocerlas, porque una expresión copiada que use una simplemente fallará.

Los cinco campos

7

Una línea cron tiene cinco campos separados por espacios en blanco, seguidos del comando. Cada campo debe estar presente; no hay forma de omitir uno.

ExpresiónRangoSignificado
* * * * *min hod dom mes dowLos cinco campos en orden: minuto, hora, día del mes, mes, día de la semanaCinco asteriscos significan cada minuto de cada día — la expresión más suelta que existe.
minute0-59Primer campo
hour0-23Segundo campo, en formato de 24 horas
day of month1-31Tercer campoUn día que no existe en un mes dado simplemente se omite — 31 se ejecuta siete veces al año, no doce.
month1-12Cuarto campo
day of week0-7Quinto campo, domingo primeroTanto 0 como 7 significan domingo, por eso el rango llega a siete en lugar de seis.
0 5 13 * 5Cuando ambos campos de día están restringidos, cron se ejecuta en cualquiera — no en ambosEsto se ejecuta el 13 y cada viernes, así que no es "viernes 13". Es la única regla cron que sorprende a todos.

Operadores

10

Los mismos cuatro operadores funcionan en cada campo; solo cambia el rango de números que aceptan.

ExpresiónRangoSignificado
*Cada valor que el campo permite
1,15,30Una lista de valores individuales
9-17Un rango inclusivo
*/15Cada n-ésimo valor en todo el campo*/15 en el campo de minutos significa :00, :15, :30 y :45 — se cuenta desde el inicio del rango, no desde ahora.
9-17/2Cada n-ésimo valor dentro de un rango
5/10Cada n-ésimo valor desde un punto de inicio hasta el final del campo
0,30 9-17 * * 1-5Los operadores se combinan libremente, en cualquier campoEn la media hora, entre las nueve y las cinco, lunes a viernes.
JAN-DEC1-12Nombres de meses, tres letras, sin distinción de mayúsculas
SUN-SAT0-6Nombres de días, tres letras, sin distinción de mayúsculas
70Domingo, escrito de la otra forma

Macros abreviadas

7

Siete nombres que representan toda una expresión. Son una conveniencia del formato de archivo crontab en lugar de parte de la gramática de campos, así que un programador que lee cadenas cron no necesariamente los acepta.

ExpresiónRangoSignificado
@hourly0 * * * *En la cima de cada hora
@daily0 0 * * *Una vez al día a medianoche
@midnight0 0 * * *Lo mismo que @daily
@weekly0 0 * * 0Una vez a la semana, domingo a medianoche
@monthly0 0 1 * *El primero del mes a medianoche
@yearly0 0 1 1 *El primero de enero a medianoche
@annually0 0 1 1 *Lo mismo que @yearly

Ejemplos trabajados

14

Lee uno de derecha a izquierda cuando deje de tener sentido: el campo más grueso está a la derecha, y decide qué días los más finos se consultan incluso.

ExpresiónRangoSignificado
* * * * *Cada minuto
*/5 * * * *Cada cinco minutos
0 * * * *Cada hora, en punto
0,30 * * * *Cada media hora
0 3 * * *Cada día a las 03:00
0 9,17 * * *Dos veces al día, a las 09:00 y 17:00
*/15 9-17 * * 1-5Cada quince minutos durante el horario laboral entre semana
0 8 * * 1-5Entre semana a las 08:00
0 10 * * 6,0Sábados y domingos a las 10:00
30 7 * * MONLunes a las 07:30
0 0 1 * *Medianoche del primer día de cada mes
0 0 28-31 * *Cada día en la última parte del mesEl cron estándar no conoce "último día del mes". Esto se ejecuta hasta cuatro veces; la solución habitual es un script que verifica la fecha y termina temprano.
0 0 1 1,4,7,10 *Medianoche del primer día de cada trimestre
0 0 1 1 *Una vez al año, al inicio del 1 de enero

Extensiones que este sitio no acepta

6

Las agregan Quartz, Jenkins y algunos planificadores en la nube. Se enumeran para que las reconozcas en otro crontab — el analizador en este sitio rechaza cada una, al igual que cron enviado con Linux.

ExpresiónRangoSignificado
?"Sin valor específico", en el campo de día que el otro ya restringe
LEl último día del mes, o el último día de la semana dado
15WEl día hábil más cercano al 15
FRI#3El tercer viernes del mes
*/30 * * * * *Un sexto campo para segundos, al frenteSeis campos, no cinco. Quartz y varias librerías de lenguaje usan esta forma; el archivo crontab no.
@rebootEjecutar una vez cuando la máquina arrancaReal en crontab, pero no es un cronograma — no hay siguiente ejecución para calcular, por eso el analizador aquí lo rechaza.

Preguntas frecuentes

¿Por qué mi trabajo de "viernes 13" se ejecutó cada viernes?
Porque cuando están restringidos el día del mes y el día de la semana, cron los trata como o, no como y. 0 5 13 * 5 se ejecuta el 13 y todos los viernes. Obtener un verdadero viernes 13 requiere una verificación de fecha dentro del script.
¿Significa */5 "cada cinco minutos a partir de ahora"?
No. Los pasos se cuentan desde el inicio del rango del campo, no desde el momento en que instalas el trabajo, así que */5 en el campo de minutos significa :00, :05, :10 y así sucesivamente, sin importar cuándo se escribió.
¿Qué zona horaria usa cron?
La del sistema, a menos que crontab establezca CRON_TZ o TZ en la parte superior. Esto importa dos veces al año: un trabajo programado en la hora que un cambio de horario de verano omite no se ejecuta, y uno en la hora que se repite puede ejecutarse dos veces.
¿Es 0 lo mismo que 7 en el campo día de la semana?
Sí, ambos son domingo. El duplicado existe para que un rango como 1-7 que cubre lunes a domingo se pueda escribir naturalmente, lo que un campo 0-6 no puede expresar en un solo rango.
¿Dónde puedo probar una expresión?
El analizador cron en este sitio toma una expresión y muestra las próximas ejecuciones en lenguaje natural, localmente en tu navegador. La herramienta a su lado va en sentido opuesto: selecciona un cronograma y escribe la expresión.