Cómo configurar cronjobs en Linux

Author
Por Darío Rivera
Publicado el 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

Acerca de Darío Rivera

Author

Application Architect at Elentra Corp . Quality developer and passionate learner with 10+ years of experience in web technologies. Creator of EasyHttp , an standard way to consume HTTP Clients.

LinkedIn Twitter Instagram

Sólo aquellos que han alcanzado el éxito saben que siempre estuvo a un paso del momento en que pensaron renunciar.