Introducción
El nombre cron se deriva de la palabra griega para tiempo, chrono. Crontab es un archivo que contiene entradas de cron para ejecutarse en un momento especificado. Cron es muy útil para programar tareas repetitivas, automatizar el mantenimiento y la administración de un sistema.
Cada usuario del sistema tiene un crontab individual separado y los comandos programados dentro de él deben ejecutarse en el contexto de los permisos del usuario. Un usuario regular solo puede modificar su propio crontab, mientras que root puede modificar el crontab de cualquier usuario.
Crontab no realiza validación de errores, como errores de sintaxis o edición simultánea. Los errores solo se detectan durante la ejecución de los comandos programados.
Entorno de instalación
Este artículo se basó en Slackware Linux 15.0 y el paquete dcron-4.5. La mayoría de la información presentada aquí es aplicable a cualquier distribución, pero pueden existir pequeñas diferencias.
Ejemplos prácticos
Para editar el archivo crontab, use el comando crontab -e. Las líneas en blanco se ignoran y las líneas que comienzan con el carácter # se consideran comentarios.
crontab
# ejecuta el comando 'date' cada minuto * * * * * date # ejecuta el comando cada 5 minutos */5 * * * * date # ejecuta cada hora en el minuto 25 de cada hora 25 * * * * date # ejecuta todos los días a las 6:10 10 6 * * * date # ejecuta cada dos horas al inicio de la hora 0 */2 * * * date # ejecuta cada minuto entre las 12 y las 13 horas * 12 * * * date # cada dos horas entre las 23 y las 7 horas, y nuevamente a las 8 horas 0 23-7/2,8 * * * date # ejecuta a las 4:00 horas el 1 de enero 0 4 1 1 * date # todos los días a las 11 horas y registra la salida del comando en el archivo date-output 0 11 * * * date >> /var/log/date-output 2>&1
- * ➟ todos (minutos, horas, días, meses)
- 0-5 ➟ define un intervalo, 0, 1, 2, 3, 4 y 5
- 2,4,5 ➟ lista, 2, 4 y 5
- */2 ➟ cada intervalo de 2 (minutos, horas, días, meses)
Comandos crontab
- crontab -e ➟ abre el crontab para editar
- crontab -l ➟ muestra el contenido del archivo crontab
- crontab -d ➟ elimina el archivo crontab (o crontab -r dependiendo de la distribución)
- crontab -e -u <usuario> ➟ edita el crontab de un usuario específico, debe ejecutarse como root. -u puede combinarse con otros parámetros, -l para listar, -d (o -r) para eliminar.
Eligiendo el editor
Crontab utiliza el editor especificado en las variables de entorno VISUAL o EDITOR. Si no se define ninguna, se usará el editor vi. Para cambiar el editor use:
$ Shell
# Cambia el editor a emacs export EDITOR=emacs crontab -e # Para usar el editor elvis export EDITOR=elvis crontab -e # Para usar el editor vi export EDITOR=vi crontab -e
El cambio anterior será válido durante la sesión. Al reiniciar, la variable perderá el valor definido. Para hacerlo permanente, coloque el comando export dentro del archivo ~/.bashrc.
Organizando por carpetas
El crontab de root está preconfigurado para ejecutar scripts colocados en directorios específicos periódicamente, según el nombre de la carpeta:
- /etc/cron.hourly/ - Cada hora.
- /etc/cron.daily/ - Una vez al día.
- /etc/cron.weekly/ - Una vez a la semana.
- /etc/cron.monthly/ - Una vez al mes.
Esto es útil para scripts que no requieren una programación específica pero necesitan ejecutarse regularmente. La configuración que permite este funcionamiento se puede verificar dentro del crontab del usuario root:
Crontab
# Ejecuta tareas cron cada hora 47 minutos después de la hora: 47 * * * * /usr/bin/run-parts /etc/cron.hourly 1> /dev/null # Ejecuta tareas cron diarias a las 4:40 todos los días: 40 4 * * * /usr/bin/run-parts /etc/cron.daily 1> /dev/null # Ejecuta tareas cron semanales a las 4:30 del primer día de la semana: 30 4 * * 0 /usr/bin/run-parts /etc/cron.weekly 1> /dev/null # Ejecuta tareas cron mensuales a las 4:20 del primer día del mes: 20 4 1 * * /usr/bin/run-parts /etc/cron.monthly 1> /dev/null
Si lo desea, puede cambiar las horas y días de ejecución. Por ejemplo, ejecutar los scripts 5 minutos después de la hora, en lugar de 47 minutos como estaba configurado originalmente. Recuerde que esta es una configuración basada en carpetas; para programaciones más precisas, debe crear la configuración individual para la ejecución de cada comando.
Recuerde que, al colocar un script en esta carpeta, debe asegurarse de que tenga permisos de ejecución configurados para que pueda ejecutarse.
Registro
Con el usuario root puede consultar el registro de cron en: /var/log/cron.
# Shell
tail -f /var/log/cron
Con un usuario regular es posible redirigir el error (stderr) a un archivo de registro en el directorio personal, usando el redireccionador 2>>.
Crontab
* * * * * ls /home/usuario/no-existe 2>> /home/usuario/crontab.log
Conclusión
La programación de tareas en Linux utilizando crontab es una herramienta poderosa que permite automatizar procesos, ahorrando tiempo y reduciendo el margen de error en las operaciones manuales. Con una configuración simple, los usuarios pueden programar comandos y scripts para que se ejecuten a intervalos regulares, garantizando el mantenimiento adecuado del sistema y la ejecución de tareas repetitivas. Al comprender los formatos y opciones de crontab, es posible personalizar los horarios según sea necesario, promoviendo una mayor eficiencia y organización.
Referencias
La principal fuente para este artículo fue el manual (man page) de crontab disponible en Slackware Linux. Se emplearon inteligencias artificiales para la corrección de errores gramaticales y semánticos, así como la optimización de la estructura textual y el vocabulario.