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
7Una 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ón | Rango | Significado |
|---|---|---|
| * * * * * | min hod dom mes dow | Los 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. |
| minute | 0-59 | Primer campo |
| hour | 0-23 | Segundo campo, en formato de 24 horas |
| day of month | 1-31 | Tercer campoUn día que no existe en un mes dado simplemente se omite — 31 se ejecuta siete veces al año, no doce. |
| month | 1-12 | Cuarto campo |
| day of week | 0-7 | Quinto campo, domingo primeroTanto 0 como 7 significan domingo, por eso el rango llega a siete en lugar de seis. |
| 0 5 13 * 5 | Cuando 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
10Los mismos cuatro operadores funcionan en cada campo; solo cambia el rango de números que aceptan.
| Expresión | Rango | Significado |
|---|---|---|
| * | Cada valor que el campo permite | |
| 1,15,30 | Una lista de valores individuales | |
| 9-17 | Un rango inclusivo | |
| */15 | Cada 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/2 | Cada n-ésimo valor dentro de un rango | |
| 5/10 | Cada n-ésimo valor desde un punto de inicio hasta el final del campo | |
| 0,30 9-17 * * 1-5 | Los operadores se combinan libremente, en cualquier campoEn la media hora, entre las nueve y las cinco, lunes a viernes. | |
| JAN-DEC | 1-12 | Nombres de meses, tres letras, sin distinción de mayúsculas |
| SUN-SAT | 0-6 | Nombres de días, tres letras, sin distinción de mayúsculas |
| 7 | 0 | Domingo, escrito de la otra forma |
Macros abreviadas
7Siete 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ón | Rango | Significado |
|---|---|---|
| @hourly | 0 * * * * | En la cima de cada hora |
| @daily | 0 0 * * * | Una vez al día a medianoche |
| @midnight | 0 0 * * * | Lo mismo que @daily |
| @weekly | 0 0 * * 0 | Una vez a la semana, domingo a medianoche |
| @monthly | 0 0 1 * * | El primero del mes a medianoche |
| @yearly | 0 0 1 1 * | El primero de enero a medianoche |
| @annually | 0 0 1 1 * | Lo mismo que @yearly |
Ejemplos trabajados
14Lee 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ón | Rango | Significado |
|---|---|---|
| * * * * * | 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-5 | Cada quince minutos durante el horario laboral entre semana | |
| 0 8 * * 1-5 | Entre semana a las 08:00 | |
| 0 10 * * 6,0 | Sábados y domingos a las 10:00 | |
| 30 7 * * MON | Lunes 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
6Las 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ón | Rango | Significado |
|---|---|---|
| ? | "Sin valor específico", en el campo de día que el otro ya restringe | |
| L | El último día del mes, o el último día de la semana dado | |
| 15W | El día hábil más cercano al 15 | |
| FRI#3 | El 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. | |
| @reboot | Ejecutar 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. |