ToolsOps

Ejemplos de expresiones cron para Linux y Unix

Guía con ejemplos de expresiones cron para Linux y Unix: cada 5 minutos, cada hora, días laborables, mensual y más.

Qué es cron y para qué sirve

cron es el planificador clásico de tareas en sistemas Unix y Linux. Lee un archivo de configuración (la crontab) donde cada línea contiene una expresión de tiempo y un comando a ejecutar. Cuando la fecha y hora del sistema encajan con la expresión, el comando se lanza.

Esta guía usa el formato cron Unix/POSIX de cinco campos: minuto, hora, día del mes, mes y día de la semana. No incluye campo de segundos. No es compatible con dialectos extendidos como Quartz, que añade segundos y opciones específicas.

Cómo leer una expresión cron

Una expresión cron es una secuencia de cinco campos separados por espacios. Cada campo controla una unidad de tiempo. Si todos los campos encajan con la fecha actual, el comando se ejecuta.

┌──────── minuto         (0-59)
│ ┌────── hora           (0-23)
│ │ ┌──── día del mes    (1-31)
│ │ │ ┌── mes            (1-12)
│ │ │ │ ┌ día semana     (0-7; 0 y 7 = domingo)
│ │ │ │ │
* * * * *  comando a ejecutar

Campos de cron en detalle

  • Minuto: 0–59.
  • Hora: 0–23 (formato 24h).
  • Día del mes: 1–31.
  • Mes: 1–12 (también se aceptan nombres como JAN, FEB, ...).
  • Día de la semana: 0–7, donde 0 y 7 son domingo (algunas implementaciones aceptan SUN, MON, ...).

Diferencia entre *, */n, rangos y listas

  • * — cualquier valor del campo.
  • */n — cada n unidades. Ejemplo: */5 en minutos = 0, 5, 10, 15, ...
  • a-b — rango inclusivo. Ejemplo: 9-17 en horas = 9, 10, ..., 17.
  • a,b,c — lista explícita. Ejemplo: 1,15 en día del mes = 1 y 15.

Errores frecuentes

  • Usar 6 o 7 campos al copiar una expresión Quartz. En cron Unix son 5.
  • Asumir AND entre día del mes y día de la semana. La mayoría de implementaciones usan OR.
  • Olvidar la zona horaria. Cron evalúa con el TZ del proceso, no UTC.
  • No redirigir la salida. Si el comando imprime, cron envía el output por correo del sistema.
  • Permisos: si el comando es un script, debe tener bit de ejecución y ruta absoluta.

Cron en Linux frente a Quartz y otros formatos

El cron clásico de Unix/Linux trabaja con 5 campos y resolución de minuto. Quartz, usado en aplicaciones Java y Spring, añade un campo de segundos (y opcionalmente uno de año), aceptando 6 o 7 campos. Los caracteres como L, W o # son extensiones de Quartz y no están disponibles en cron POSIX. Si copias una expresión entre sistemas, valida primero el número de campos.

Tabla de ejemplos comunes

Copia cualquier expresión y pégala en el generador para ver las próximas ejecuciones.

ExpresiónSignificadoCaso de uso
* * * * *Cada minutoMonitorización en desarrollo o smoke tests.
*/5 * * * *Cada 5 minutosSondeo de un servicio o sincronización ligera.
0 * * * *Cada hora en puntoRotación de logs o limpieza de caché horaria.
0 9 * * *Cada día a las 09:00Resumen diario por email.
0 9 * * 1-5De lunes a viernes a las 09:00Tareas solo en días laborables.
0 0 * * 0Cada domingo a medianocheMantenimiento semanal fuera de horario.
0 0 1 * *El día 1 de cada mes a medianocheFacturación mensual o cierres contables.
0 0 1 1 *El 1 de enero a medianocheReset anual de contadores.
*/15 9-17 * * 1-5Cada 15 minutos en horario laboralComprobaciones frecuentes solo en jornada.
0 2 * * *Todos los días a las 02:00Backups nocturnos.

Usa el generador de cron

Siguientes pasos

Si el cron ejecuta un script, revisa también los permisos con la calculadora chmod. Asegúrate de que el archivo es ejecutable (chmod +x script.sh) antes de programar la tarea.

Preguntas frecuentes

¿Qué formato de cron usa esta guía?
Formato Unix/POSIX de cinco campos: minuto, hora, día del mes, mes y día de la semana. Sin campo de segundos. No es el formato Quartz utilizado por Spring o algunos schedulers Java.
¿Qué pasa si combino día del mes y día de la semana?
En la mayoría de implementaciones Unix/POSIX se aplica una semántica OR: la tarea se ejecuta cuando coincide CUALQUIERA de los dos campos. Por ejemplo, `0 0 1 * 1` ejecuta el día 1 de cada mes O cada lunes, no solo cuando un lunes cae en día 1.
¿En qué zona horaria se evalúa la expresión?
Cron evalúa la expresión en la zona horaria del proceso que lo ejecuta (típicamente la del sistema). Si necesitas otra zona, ajusta la variable TZ del entorno o usa un wrapper que la fije antes del comando.
¿Qué significa `*/n`?
El operador `*/n` significa cada `n` unidades dentro del rango del campo. Por ejemplo, `*/15` en el campo de minutos equivale a `0,15,30,45`.
¿Cuál es el error más típico al escribir una expresión?
Confundir el día de la semana (0 = domingo en la mayoría de implementaciones Unix) o asumir que `0 0 1 * 1` significa AND. También usar 7 campos al copiar expresiones Quartz; en Unix solo hay 5.