Cómo configurar cronjobs en Linux
En sistemas GNU/Linux es común tener tareas que deben ejecutarse de manera automática en determinados intervalos de tiempo, como respaldos de bases de datos, limpieza de archivos temporales, generación de reportes o sincronización de información. Para este tipo de necesidades existe cron, un servicio que permite programar la ejecución de comandos y scripts utilizando una configuración basada en fecha y hora.
En este artículo veremos cómo configurar cronjobs en Linux, cómo administrar las tareas programadas de un usuario específico y cómo definir la frecuencia de ejecución utilizando el comando crontab.
Para configurar los cronjobs del usuario en sesión podemos ejecutar el siguiente comando. Esto abrirá el archivo de configuración de crons en modo edición.
crontab -e Así mismo podemos ver la lista de cronjobs con el siguiente comando.
crontab -l Para configurar los cronjobs de un usuario en específico sin iniciar sesión con él explícitamente podemos correr el siguiente comando.
sudo crontab -u www-data -e Sintaxis de un cronjob
Cada entrada en el archivo de crontab está compuesta por cinco campos que representan la fecha y hora de ejecución, seguidos del comando que se desea ejecutar.
* * * * * comando
- - - - -
| | | | |
| | | | +----- Día de la semana (0-7) (0 y 7 representan domingo)
| | | +------- Mes (1-12)
| | +--------- Día del mes (1-31)
| +----------- Hora (0-23)
+------------- Minuto (0-59) Por ejemplo, para ejecutar un script todos los lunes a las 8:00 a.m. se puede utilizar la siguiente expresión.
0 8 * * 1 /root/scripts/mysql_backup.sh Instalación
En algunas distribuciones Linux se requiere instalar el paquete de crons para poder utilizarlos. Por ejemplo, en GNU/Linux Debian.
sudo apt install cron Para configurar los crons por primera vez para el usuario en sesión se puede utilizar el siguiente comando. Es importante notar que este comando abrirá el archivo de crons en modo edición.
crontab -e
Una vez configurado, puedes imprimir el archivo de crons directamente en la terminal con
crontab -l
Sistemas de crontab
Existen dos sistemas de crontab, uno global y otro personal. Los cronjobs globales pueden ser encontrados generalmente en la siguiente ruta:
cat /etc/crontab
También puedes encontrar cronjobs en /etc/cron.d/. Aunque estos jobs no pertenecen directamente al usuario root, son ejecutados por él.
Los cronjobs personales se ubican generalmente en la siguiente ruta (Debian):
/var/spool/cron/crontabs/
Esto significa que el ejecutar cronjob -e con el usuario root estás editando los cronjobs personales de root y no los del sistema. Entender esto te facilitará la vida al trabajar con cronjobs.
Expresiones especiales
Cron también permite utilizar algunas expresiones especiales para definir tareas comunes de una manera más sencilla.
@reboot Ejecuta el comando al iniciar el sistema.
@yearly Equivale a 0 0 1 1 *
@monthly Equivale a 0 0 1 * *
@weekly Equivale a 0 0 * * 0
@daily Equivale a 0 0 * * *
@hourly Equivale a 0 * * * * Por ejemplo, para ejecutar un script automáticamente cada vez que el sistema inicia podemos utilizar la siguiente configuración.
@reboot /ruta/al/script.sh Redireccionar la salida
Cuando un cronjob falla puede ser complicado identificar la causa del problema. Por esta razón es recomendable guardar la salida generada por el comando en un archivo de registro.
0 8 * * 1 /root/scripts/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1 En este ejemplo, tanto la salida estándar como los errores generados durante la ejecución serán almacenados en el archivo /var/log/mysql_backup.log.
Permisos de ejecución
Finalmente, si el cronjob ejecuta un script, debemos verificar que el archivo tenga permisos de ejecución.
chmod +x /root/scripts/mysql_backup.sh Los cronjobs son una herramienta fundamental en la administración de sistemas GNU/Linux, ya que permiten automatizar tareas repetitivas sin intervención manual. Con una configuración adecuada es posible programar respaldos, mantenimiento del sistema y cualquier proceso que necesite ejecutarse periódicamente.
Solución de problemas
Se pueden chequear los logs del servicio de cron con el siguiente comando:
journalctl -e -u cron
Errores comunes
A continuación puedes observar una serie de errores comunes al configurar cronjobs y cómo solucionarlos.
Username erróneo o faltante
Error: bad username; while reading /etc/crontab
Ten en cuenta que los crons del sistema requieren un usuario. La sintaxis de /etc/crontab es un poco diferente, en el sentido de que es necesario especificar el usuario que ejecuta un job en particular. Por ejemplo, el siguiente job sería válido para un usuario.
* * * * * /root/scripts/mysql_backup.sh
Sin embargo, la forma correcta de configurarlo de manera global sería la siguiente:
* * * * * root /root/scripts/mysql_backup.sh