CRON es el administrador de procesos en segundo plano (demonio o daemon) estándar de los sistemas operativos tipo Unix (como Linux y macOS) que se encarga de ejecutar tareas, scripts o comandos automatizados de forma periódica y programada en segundo plano.
Su nombre proviene de la palabra griega chronos (tiempo). El servicio se ejecuta de manera continua desde el arranque del sistema y comprueba permanentemente las tablas de programación (conocidas como crontab) para verificar si algún comando debe ser lanzado en función de la hora, el día de la semana o el mes actual.
¿Cómo funciona la sintaxis de Cron?
La programación de las tareas en CRON se estructura mediante líneas de texto compuestas por cinco campos temporales seguidos de la ruta completa del comando o script que se desea ejecutar:
* * * * * /ruta/al/comando/script.sh
│ │ │ │ │
│ │ │ │ └── Día de la semana (0 - 7, donde 0 y 7 son Domingo)
│ │ │ └──── Mes (1 - 12)
│ │ └────── Día del mes (1 - 31)
│ └──────── Hora (0 - 23)
└────────── Minuto (0 - 59)
- Caracteres especiales: Se pueden utilizar comodines como el asterisco (
*para "todos los valores"), la coma (1,15,30para listas específicas), el guion (1-5para rangos continuos) o la barra diagonal (*/10para intervalos de repetición, como cada 10 minutos). - El demonio crond: Es el proceso del núcleo encargado de leer los ficheros de configuración del sistema (como
/etc/crontab) y las tablas individuales de los usuarios para lanzar los procesos con los permisos adecuados.
Ejemplos comunes de tareas programadas (Crontab)
| Expresión Cron | Descripción de la Frecuencia |
|---|---|
0 3 * * * |
Se ejecuta todos los días a las 03:00 de la madrugada (habitualmente usado para respaldos). |
*/15 * * * * |
Se ejecuta de forma recurrente cada 15 minutos exactos, todos los días. |
0 0 1 * * |
Se ejecuta el primer día de cada mes a medianoche (00:00). |
30 8 * * 1-5 |
Se ejecuta de lunes a viernes (días 1 al 5) exactamente a las 08:30 de la mañana. |
Características principales:
- Permite automatizar tareas rutinarias de mantenimiento del sistema, tales como copias de seguridad de bases de datos, rotación de archivos de registro (*logrotate*), limpieza de temporales o actualizaciones periódicas.
- Cada usuario del sistema operativo (incluido el superusuario root) posee su propio archivo
crontabindependiente para gestionar sus automatizaciones privadas. - Para editar o modificar las tareas programadas de un usuario de forma segura, se utiliza el comando de gestión interactiva
crontab -e, el cual valida automáticamente la sintaxis al guardar los cambios. - A diferencia de los temporizadores modernos basados en systemd (como los *timers*), CRON destaca por su sencillez histórica, ligereza y compatibilidad universal en cualquier distribución basada en Unix.
- Si el equipo se encuentra apagado en el momento exacto en que una tarea de cron debía ejecutarse, dicha tarea se omite por completo (a menos que se utilicen herramientas complementarias como *anacron* para equipos que no están encendidos 24/7).
Analogía: Imagina un mayordomo o un despertador programado con un calendario perpetuo en la pared. Cada minuto que pasa, el mayordomo mira su reloj y consulta una libreta donde pone: "A las 03:00 en punto, baja al sótano y haz una copia de seguridad de la caja fuerte". No importa que estés durmiendo o que el resto de la casa esté haciendo otras cosas; en cuanto el minutero coincide con la regla escrita en la libreta, el asistente ejecuta la orden de manera automática e implacable.
Actividad práctica
Objetivo:
Crear, listar y programar una tarea automatizada utilizando el editor de tablas crontab en un entorno Linux.
Tareas:
- Abre tu terminal de comandos en Linux y edita la tabla de tareas cron personales del usuario actual ejecutando:
crontab -e - Añade una nueva línea al final del archivo para programar un comando que escriba la fecha actual en un archivo de registro cada minuto:
* * * * * date >> /tmp/registro_cron.txt - Guarda los cambios y cierra el editor. Comprueba que la tarea se ha registrado correctamente listando las reglas activas:
crontab -l - Espera un par de minutos y comprueba el contenido del archivo de salida en
/tmp/registro_cron.txtpara verificar que CRON ha ejecutado el comando con éxito.
Preguntas de reflexión:
- ¿Qué significan los cinco asteriscos iniciales (
* * * * *) en una línea de configuración de crontab? - ¿Qué diferencia operativa existe entre editar las tareas de un usuario normal mediante
crontab -ey modificar el archivo global del sistema ubicado en/etc/crontab? - ¿Qué sucede con una tarea programada en CRON si el ordenador se encontraba apagado en el momento exacto en que debía haberse ejecutado?
- ¿Por qué es una buena práctica utilizar rutas absolutas (por ejemplo,
/usr/bin/python3en lugar de solopython3) al escribir scripts automatizados en cron? - ¿Qué utilidad aporta el comando
crontab -la un administrador de sistemas en su día a día?
Haz clic aquí para ver las soluciones y explicaciones
1. ¿Qué significan los cinco asteriscos iniciales (* * * * *) en una línea de configuración de crontab?
Representan la programación temporal de la tarea en orden secuencial: minuto, hora, día del mes, mes y día de la semana. Al estar configurados todos como asteriscos (*), indican que la tarea se ejecutará de forma continuada cada minuto de cada hora, de cada día del mes y de cada semana.
2. ¿Qué diferencia operativa existe entre editar las tareas de un usuario normal mediante crontab -e y modificar el archivo global del sistema ubicado en /etc/crontab?
El comando crontab -e gestiona las tareas personales asociadas exclusivamente al usuario actual (guardándose de forma aislada en el directorio de spool del sistema). Por el contrario, el archivo global /etc/crontab pertenece al sistema operativo y requiere privilegios de superusuario (root), incluyendo además un campo obligatorio adicional para especificar con qué usuario exacto se debe ejecutar cada tarea programada.
3. ¿Qué sucede con una tarea programada en CRON si el ordenador se encontraba apagado en el momento exacto en que debía haberse ejecutado?
El demonio cron tradicional no almacena de forma retroactiva las tareas perdidas, por lo que si el equipo estaba apagado en ese momento, la ejecución programada se omitirá y se perderá (a menos que se utilicen herramientas complementarias de gestión de tareas diferidas como anacron).
4. ¿Por qué es una buena práctica utilizar rutas absolutas (por ejemplo, /usr/bin/python3 en lugar de solo python3) al escribir scripts automatizados en cron?
Porque el entorno de ejecución en el que se ejecuta cron tiene una variable de entorno PATH muy reducida y limitada en comparación con una terminal interactiva de usuario. Si no se especifica la ruta absoluta de los comandos o intérpretes, cron no los encontrará y la tarea fallará silenciosamente.
5. ¿Qué utilidad aporta el comando crontab -l a un administrador de sistemas en su día a día?
Permite listar y visualizar de forma rápida y limpia todas las tareas programadas activas del usuario actual en la terminal, facilitando la auditoría, comprobación y revisión de la automatización sin necesidad de abrir ningún editor de texto.