Archivos relacionados con las tareas programadas en Ubuntu Server 20.04 LTS

Publicado por P. Ruiz en

Ya hemos visto en otros artículos de SomeBooks.es que el modo más sencillo de crear una tarea programada es utilizando el comando crontab -e. Al hacerlo, se abre el editor de textos que tengamos definido en la variable de entorno $EDITOR y, en él, escribimos la tarea con la sintaxis adecuada.

Esto es lo que habrás observado al programar tareas en Ubuntu para automatizar algún proceso.

Quizás en esos momentos te hayas preguntado cómo funcionan las cosas en la trastienda y dónde guarda el sistema operativo las tareas que has escrito. Esta y algunas otras cuestiones son las que trataremos de aclarar en el artículo de hoy.

Si aún no te has familiarizado con la programación de tareas en Ubuntu 20.04 LTS, te recomiendo que le eches un vistazo a los siguientes artículos:

Archivos con las tareas programadas de cada usuario

Las tareas que se crean con el comando crontab se guardan en el directorio /var/spool/cron/crontabs con el nombre del usuario al que pertenecen. De este modo, según creemos tareas para nuevos usuarios, irán apareciendo nuevos archivos.

Contenido del directorio en el momento de escribir este artículo

Archivos-relacionados-con-las-tareas-programadas-en-Ubuntu-Server-20-04-LTS-001

Observa que hemos necesitado privilegios administrativos para consultar el contenido del directorio. De esa forma, ningún otro usuario podrá saber las tareas programadas que tienen el resto.

Por otro lado, en la imagen anterior observamos que, en nuestro ejemplo, solo existen dos cuentas de usuario que tengan programadas tareas en el sistema: root y usuario.

Cuando eliminemos las tareas de un usuario (por ejemplo con sudo crontab -u usuario -r) desaparecerá su archivo correspondiente en el directorio /var/spool/cron/crontabs.

El archivo /etc/crontab

De forma complementaria a los archivos que contienen las tareas programadas de cada usuario, el archivo /etc/crontab almacena las tareas generales del sistema.

Se trata de un archivo al que solo se puede acceder con privilegios administrativos. Por lo tanto, para comprobar su aspecto, basta con utilizar el editor de textos nano, o cualquier otro que prefieras, precedido de la orden sudo:

sudo nano /etc/crontab

Como de costumbre, escribimos el comando y pulsamos la tecla Intro.

Archivos-relacionados-con-las-tareas-programadas-en-Ubuntu-Server-20-04-LTS-005

Al momento, tendremos el contenido del archivo en la pantalla.

Contenido predeterminado del archivo /etc/crontab.

Archivos-relacionados-con-las-tareas-programadas-en-Ubuntu-Server-20-04-LTS-006

La idea es que se ejecuten de forma sistemática las cuatro tareas programadas que hay definidas en la parte inferior del archivo. En realidad, todas ellas son prácticamente iguales y consisten en ejecutar uno a uno, todos los scripts que contengan los directorios cron.hourly, cron.daily, cron.monthly y cron.weekly.

Lógicamente, lo que cambia es la definición del periodo:

  1. En la primera (17 * * * *), los scripts que se encuentren dentro del directorio cron.hourly se ejecutarán en el minuto 17 de cada hora, todos los días.

  2. En la segunda (25 6 * * *), los scripts que se encuentren dentro del directorio cron.daily se ejecutarán a las 6:25 de la mañana, también todos los días.

  3. En la tercera (47 6 * * 7), los scripts que se encuentren dentro del directorio cron.weekly se ejecutarán todos los domingos a las 6:47.

  4. En la cuarta (52 6 1 * *), los scripts que se encuentren dentro del directorio cron.monthly se ejecutarán el día 1 de cada mes a las 6:52 .

Como habrás observado, quizás la diferencia más significativa con los archivos de las tareas programadas de los usuarios es que, ahora, justo antes del comando a ejecutar, se incluye el nombre de la cuenta cuyos privilegios se usarán para hacerlo.

Si te estás preguntando qué hace cada una de las líneas anteriores, quizás te ayude esta breve explicación:

    1. El comando run-parts ejecuta los ficheros que tengan permiso de ejecución dentro del directorio que se indique.

      El argumento –report hace que se muestre el nombre del script ejecutado (se hará en la salida estándar o en la salida de error, según corresponda).

    2. El comando test, con la sintaxis empleada aquí, comprueba si existe el archivo /usr/sbin/anacron (en definitiva, si está instalado anacron) y si tiene permiso de ejecución. En caso afirmativo, no ejecuta los scripts correspondientes. Así se evita que se ejecuten dos veces.

    3. El operador || (or) evalúa la primera expresión y, si devuelve true, ya no evalúa la segunda.

Otros archivos y directorios

Además de los archivos anteriores, dentro del directorio /etc encontramos otros archivos y directorios que están relacionados con la programación de tareas:

  • Tenemos los archivos crontab, cron.allow y cron.deny. El primero lo hemos mencionado más arriba y los dos últimos ya los conocemos del artículo Controlar los usuarios que pueden programar tareas en Ubuntu Server 20.04 LTS.

  • El directorio cron.d se utiliza en otras distribuciones para guardar los archivos cron.allow y cron.deny, que, como ya hemos dicho, en Ubuntu 20.04 LTS se encuentran dentro del directorio /etc.

  • Por su parte, como hemos mencionado más arriba, los directorios cron.hourly, cron.daily, cron.monthly y cron.weekly están diseñados para contener scripts que se ejecuten con la periodicidad que se corresponde con su nombre.

Para comprobar la existencia de estos archivos y directorios, basta con usar el siguiente comando:

ls /etc --group-directories-first

Como habrás imaginado, el argumento –group-directories-first nos permite obtener separados los directorios de los archivos.

Archivos-relacionados-con-las-tareas-programadas-en-Ubuntu-Server-20-04-LTS-002

Y a continuación mostramos la salida completa…

Archivos y directorios relacionados con el servicio cron.

Archivos-relacionados-con-las-tareas-programadas-en-Ubuntu-Server-20-04-LTS-003

Y esto es todo por el momento. Espero que te haya resultado interesante.