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:*/5en minutos = 0, 5, 10, 15, ...a-b— rango inclusivo. Ejemplo:9-17en horas = 9, 10, ..., 17.a,b,c— lista explícita. Ejemplo:1,15en 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ón | Significado | Caso de uso |
|---|---|---|
| * * * * * | Cada minuto | Monitorización en desarrollo o smoke tests. |
| */5 * * * * | Cada 5 minutos | Sondeo de un servicio o sincronización ligera. |
| 0 * * * * | Cada hora en punto | Rotación de logs o limpieza de caché horaria. |
| 0 9 * * * | Cada día a las 09:00 | Resumen diario por email. |
| 0 9 * * 1-5 | De lunes a viernes a las 09:00 | Tareas solo en días laborables. |
| 0 0 * * 0 | Cada domingo a medianoche | Mantenimiento semanal fuera de horario. |
| 0 0 1 * * | El día 1 de cada mes a medianoche | Facturación mensual o cierres contables. |
| 0 0 1 1 * | El 1 de enero a medianoche | Reset anual de contadores. |
| */15 9-17 * * 1-5 | Cada 15 minutos en horario laboral | Comprobaciones frecuentes solo en jornada. |
| 0 2 * * * | Todos los días a las 02:00 | Backups nocturnos. |
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.