Cómo Leer y Entender Expresiones Cron
Una expresión cron es una cadena de cinco o seis campos que describe un horario recurrente. Una vez que aprendes el patrón, puedes leer cualquier expresión cron como si fuera texto simple. Esta guía te enseña a decodificar cada elemento de la sintaxis cron, desde simples * * * * * hasta expresiones complejas con rangos, pasos y caracteres especiales.
Los Cinco Campos de Cron
Cada expresión cron tiene cinco campos de tiempo seguidos del comando:
┌───────── Minuto (0-59)
│ ┌──────── Hora (0-23)
│ │ ┌─────── Día del Mes (1-31)
│ │ │ ┌────── Mes (1-12)
│ │ │ │ ┌───── Día de la Semana (0-7, 0 y 7 = Domingo)
│ │ │ │ │
* * * * * <comando>
Leyendo de izquierda a derecha: "¿A qué minuto, a qué hora, en qué día del mes, en qué mes, y en qué día de la semana?"
Leyendo Expresiones Paso a Paso
Ejemplos Simples
0 9 * * *
Se lee como: "En el minuto 0, a la hora 9, cada día del mes, cada mes, cada día de la semana." → Se ejecuta diariamente a las 9:00 AM.
*/15 * * * *
Se lee como: "Cada 15 minutos de cada hora, cada día." → Se ejecuta cada 15 minutos.
30 8 * * 1-5
Se lee como: "En el minuto 30, a la hora 8, cada día del mes, cada mes, de lunes a viernes." → Se ejecuta los días laborables a las 8:30 AM.
0 0 1 * *
Se lee como: "A medianoche del primer día de cada mes." → Se ejecuta mensualmente.
Ejemplos Complejos
0 9-17/2 * * 1-5
Desglosando:
0— en el minuto 09-17/2— cada 2 horas de 9 a 17 (es decir, 9, 11, 13, 15, 17)*— cada día del mes*— cada mes1-5— de lunes a viernes
→ Se ejecuta a las 9:00, 11:00, 13:00, 15:00 y 17:00 los días laborables.
30 6 1,15 * 0
Desglosando:
30— en el minuto 306— a la hora 61,15— en los días 1 y 15 del mes*— cada mes0— solo los domingos
→ Se ejecuta a las 6:30 AM los días 1 y 15 del mes, solo si esos días también son domingos.
Referencia de Caracteres Especiales
* — Cada / Todo
Coincide con cualquier valor para ese campo.
0 * * * * → "Cada hora"
* * * * * → "Cada minuto"
, — Lista / O
Separa múltiples valores.
0 9,12,15 * * * → "A las 9 AM, 12 PM y 3 PM"
- — Rango
Define un rango inclusivo de valores.
0 9-17 * * * → "Cada hora de 9 AM a 5 PM"
30 8 * * 1-5 → "Días laborables a las 8:30 AM"
/ — Paso
Divide el campo en incrementos.
*/15 * * * * → "Cada 15 minutos"
0 */2 * * * → "Cada 2 horas"
0 0 */3 * * → "Cada 3 días"
Los pasos pueden combinarse con rangos:
0 9-17/2 * * * → "Cada 2 horas de 9 AM a 5 PM"
30 */4 * * 1-5 → "Cada 4 horas en días laborables, en el minuto 30"
L — Último (algunos sistemas)
En algunas implementaciones de cron (como Quartz), L significa "último."
0 0 L * * → "Último día de cada mes"
# — Enésima ocurrencia (algunos sistemas)
0 9 * * 1#1 → "Primer lunes de cada mes a las 9 AM"
Expresiones Comunes Decodificadas
| Expresión | Legible para Humanos | Descripción |
|---|---|---|
* * * * * |
Cada minuto | |
*/5 * * * * |
Cada 5 minutos | |
0 * * * * |
En el minuto 0 de cada hora | Cada hora |
0 */2 * * * |
Cada 2 horas | |
0 9 * * * |
Cada día a las 9 AM | Diario |
0 9,17 * * * |
Cada día a las 9 AM y 5 PM | |
0 9 * * 1-5 |
Días laborables a las 9 AM | |
30 8 * * 1 |
Lunes a las 8:30 AM | |
0 0 1 * * |
Primero de cada mes | Mensual |
0 0 1 1 * |
1 de enero a medianoche | Anual |
*/15 9-17 * * 1-5 |
Cada 15 min durante horas laborables en días laborables | |
0 0 * * 0 |
Cada domingo a medianoche | Semanal |
0 0 */2 * * |
Cada dos días a medianoche | |
0 22 * * 5 |
Cada viernes a las 10 PM |
Cron de Seis Campos (Con Segundos)
Algunas implementaciones de cron (como Quartz Scheduler) usan seis campos, añadiendo segundos al inicio:
┌───────── Segundo (0-59)
│ ┌──────── Minuto (0-59)
│ │ ┌─────── Hora (0-23)
│ │ │ ┌────── Día del Mes (1-31)
│ │ │ │ ┌───── Mes (1-12)
│ │ │ │ │ ┌──── Día de la Semana (0-7)
│ │ │ │ │ │
* * * * * * <comando>
0 */5 * * * * → "Cada 5 minutos, en el segundo 0"
0 0 9 * * * → "Cada día a las 9:00:00 AM"
Abreviaturas No Estándar
Muchas implementaciones de cron soportan estos alias:
@yearly → 0 0 1 1 * → "Una vez al año"
@monthly → 0 0 1 * * → "Una vez al mes"
@weekly → 0 0 * * 0 → "Una vez a la semana"
@daily → 0 0 * * * → "Una vez al día"
@hourly → 0 * * * * → "Una vez por hora"
@reboot → (no es horario) → "Ejecutar al inicio"
Traduciendo Cron a Texto Legible
Cuando veas una expresión cron desconocida, decodifícala campo por campo:
Expresión: 45 17 1,15 * 1-5
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 45 | En el minuto 45 |
| Hora | 17 | A las 5 PM |
| Día del Mes | 1,15 | En los días 1 y 15 |
| Mes | * | Cada mes |
| Día de la Semana | 1-5 | De lunes a viernes |
Resultado: "A las 5:45 PM en los días 1 y 15 de cada mes, solo si esos días son laborables."
Expresión: 0 0 * * 0
| Campo | Valor | Significado |
|---|---|---|
| Minuto | 0 | A medianoche |
| Hora | 0 | A las 0 (medianoche) |
| Día del Mes | * | Cada día |
| Mes | * | Cada mes |
| Día de la Semana | 0 | Domingo |
Resultado: "Cada domingo a medianoche."
Errores Comunes al Leer Cron
Error 1: * en día-de-la-semana Y día-del-mes significa que ambos coinciden
Cuando tanto día-del-mes como día-de-la-semana son *, la expresión se ejecuta cualquier día. Pero cuando ambos tienen valores específicos, el trabajo se ejecuta si UNO de los dos coincide — es una condición OR.
0 9 15 * 1
Esto se ejecuta a las 9 AM el día 15 del mes Y cada lunes (no "el día 15 Y lunes"). Para ejecutar solo cuando ambos coincidan, necesitas dos entradas crontab separadas o lógica a nivel de script.
Error 2: Cron usa hora local, no UTC
Cron usa la hora local del sistema. En servidores configurados con UTC, 0 9 * * * se ejecuta a las 9 AM UTC. Siempre verifica la zona horaria del servidor antes de establecer horarios.
Error 3: 0 y 7 son ambos domingo
En el campo día-de-la-semana, tanto 0 como 7 representan domingo. Esto es un legado de las primeras implementaciones Unix.
Herramienta en Línea
La herramienta Analizador de Expresiones Cron en Help2Code decodifica cualquier expresión cron en una descripción legible para humanos. Pega una expresión como */15 9-17 * * 1-5 y ve un desglose campo por campo, próximas ejecuciones y una explicación en texto simple. Construye nuevas expresiones con la herramienta Generador de Comandos de Tareas Cron.
Conclusión
Leer expresiones cron es una habilidad que se vuelve natural con la práctica. Recuerda los cinco campos: minuto, hora, día-del-mes, mes, día-de-la-semana. Usa el comodín * para "cada," rangos con - para intervalos, pasos con / para incrementos, y listas con , para valores específicos. Decodifica cualquier expresión desconocida campo por campo, y usa la herramienta Analizador de Expresiones Cron para verificar tu comprensión.