Expresiones Cron Explicadas: Guía Completa de Sintaxis

· 12 min de lectura

📑 Tabla de Contenidos

Cron es el programador de tareas basado en tiempo en sistemas operativos tipo Unix. Si necesitas ejecutar un script a medianoche, respaldar una base de datos cada domingo, limpiar archivos temporales cada hora, o enviar informes el primer día de cada mes, cron es tu herramienta. Pero su sintaxis de expresiones — esas cadenas crípticas como 0 */6 * * 1-5 — pueden ser intimidantes al principio.

Esta guía desmitifica completamente las expresiones cron. Aprenderás cada campo, cada carácter especial, verás docenas de patrones del mundo real, y entenderás las trampas de zona horaria que confunden incluso a desarrolladores experimentados. Ya sea que estés programando respaldos, ejecutando scripts de mantenimiento, o automatizando informes, dominar la sintaxis cron es esencial para cualquier desarrollador o administrador de sistemas.

Anatomía de una Expresión Cron

Una expresión cron estándar tiene cinco campos separados por espacios. Cada campo representa una unidad de tiempo, y juntos definen exactamente cuándo debe ejecutarse tu tarea.

┌───────────── minuto (0-59)
│ ┌─────────── hora (0-23)
│ │ ┌───────── día del mes (1-31)
│ │ │ ┌─────── mes (1-12)
│ │ │ │ ┌───── día de la semana (0-6, Dom=0)
│ │ │ │ │
* * * * *  comando a ejecutar

Cada campo puede contener un número, un rango, una lista, un valor de paso, o un comodín. La belleza de cron es que estos simples bloques de construcción se combinan para crear patrones de programación increíblemente flexibles.

Algunas implementaciones de cron soportan un sexto campo para segundos, y un séptimo para año, pero el formato estándar de cinco campos es universalmente soportado y lo que encontrarás en la mayoría de sistemas tipo Unix incluyendo Linux, macOS, y variantes BSD.

Los Cinco Campos en Detalle

Entender el rango y comportamiento de cada campo es crucial para escribir expresiones cron correctas. Examinemos cada uno sistemáticamente.

Campo Rango Caracteres Especiales Ejemplo
Minuto 0-59 * , - / */15 (cada 15 min)
Hora 0-23 * , - / 9-17 (9 AM a 5 PM)
Día del Mes 1-31 * , - / L W 1,15 (1 y 15)
Mes 1-12 o ENE-DIC * , - / 1-6 (Ene a Jun)
Día de la Semana 0-6 o DOM-SAB * , - / L # 1-5 (Lun a Vie)

Campo Minuto (0-59)

El campo minuto controla en qué minuto de la hora se ejecuta tu tarea. Un valor de 0 significa el inicio de la hora, 30 significa media hora, y 59 es el último minuto de la hora.

Los patrones comunes incluyen */5 para cada 5 minutos, 0,30 para dos veces por hora, o 15 para un cuarto de hora cada hora.

Campo Hora (0-23)

Las horas usan formato de 24 horas donde 0 es medianoche, 12 es mediodía, y 23 es 11 PM. Esta es una de las fuentes más comunes de confusión para desarrolladores acostumbrados a la notación de 12 horas AM/PM.

Las horas de oficina típicamente se representan como 9-17 (9 AM a 5 PM), mientras que el mantenimiento nocturno podría usar 0-6 (medianoche a 6 AM).

Campo Día del Mes (1-31)

Este campo especifica qué día del mes ejecutar. Los valores válidos son 1 hasta 31, aunque no todos los meses tienen 31 días. Cron maneja esto elegantemente — si especificas el día 31 en febrero, la tarea simplemente no se ejecutará ese mes.

El carácter especial L significa "último día del mes" y se ajusta automáticamente para la longitud del mes y años bisiestos.

Campo Mes (1-12)

Los meses pueden especificarse numéricamente (1 para enero hasta 12 para diciembre) o usando abreviaturas de tres letras (JAN, FEB, MAR, etc.). Las abreviaturas no distinguen mayúsculas en la mayoría de implementaciones.

Los horarios trimestrales a menudo usan patrones como 1,4,7,10 (enero, abril, julio, octubre) o 3,6,9,12 para finales de trimestre fiscal.

Campo Día de la Semana (0-6)

Los días de la semana van desde 0 (domingo) hasta 6 (sábado). Algunos sistemas también aceptan 7 como domingo por conveniencia. También se soportan abreviaturas de tres letras (SUN, MON, TUE, etc.).

El patrón más común es 1-5 para días laborables (lunes a viernes), mientras que 0,6 o 6,0 representa fines de semana.

Consejo profesional: Cuando tanto el día del mes como el día de la semana están especificados (no comodines), la tarea se ejecuta cuando cualquiera de las condiciones se cumple (lógica OR), no ambas. Esto sorprende a muchos desarrolladores. Por ejemplo, 0 0 13 * 5 se ejecuta el día 13 de cada mes y cada viernes, no solo viernes 13.

Caracteres Especiales Explicados

Los caracteres especiales son lo que le dan a las expresiones cron su poder y flexibilidad. Cada carácter sirve un propósito específico en la definición de patrones de programación.

Asterisco (*) - Comodín

El asterisco significa "cada valor posible" para ese campo. Es el carácter especial más comúnmente usado y aparece en casi todas las expresiones cron.

Coma (,) - Separador de Lista

Las comas te permiten especificar múltiples valores discretos. Esto es perfecto cuando necesitas tiempos específicos, no consecutivos.

Guion (-) - Operador de Rango

Los guiones definen rangos inclusivos, facilitando especificar períodos continuos.

Barra (/) - Valores de Paso

La barra especifica intervalos de paso, permitiéndote ejecutar tareas a intervalos regulares dentro de un rango. La sintaxis es inicio/paso o */paso para el rango completo.

Consejo rápido: */15 no significa "cada 15 minutos comenzando ahora" — significa en los minutos 0, 15, 30, y 45 de cada hora. Si agregas una tarea cron a las 10:07, un patrón */15 se ejecutará primero a las 10:15, no a las 10:22.

L - Último Día

El carácter L significa "último" y se usa en los campos de día del mes y día de la semana. Es particularmente útil para procesamiento de fin de mes que necesita tener en cuenta longitudes variables de mes.

W - Día Laborable Más Cercano

El carácter W encuentra el día laborable más cercano a un día dado del mes. Si el día especificado cae en fin de semana, la tarea se ejecuta en el día laborable más cercano en su lugar.

Almohadilla (#) - Enésimo Día de la Semana

El carácter almohadilla especifica la enésima ocurrencia de un día de la semana dentro de un mes. La sintaxis es día#ocurrencia.

Nota que L, W, y # no están soportados en todas las implementaciones de cron. Están disponibles en versiones modernas como Vixie cron y la mayoría de programadores basados en la nube, pero pueden no funcionar en sistemas Unix más antiguos.

Patrones Cron Comunes

Veamos patrones de programación del mundo real que usarás regularmente. Estos ejemplos cubren los escenarios de automatización más comunes.

Cada Minuto, Hora, y Día

Múltiples Veces al Día

Horarios Semanales

Horarios Mensuales

Horas de Oficina y Ventanas de Mantenimiento

Caso de Uso Expresión Cron Descripción
Respaldo de base de datos 0 2 * * * Diariamente a las 2 AM
Rotación de registros 0 0 * * 0 Semanalmente el domingo a medianoche
Limpieza de caché