educación, informática y demás

Uncategorized

Caso práctico. Programación de tareas con cron.d

Ya hemos visto cómo funciona cron y cómo podemos programar tareas para que se ejecuten en un momento dado. Vamos a tratar de crear un par de tareas administrativas utilizando cron y scripts.

1. Copias de seguridad por usuario

Vamos a crear un script que cree una copia de seguridad de cada uno de los directorios personales de los usuarios del sistema. Este script se lanzará de forma automática por lo que queremos que se guarde toda la información relevante sobre operaciones realizadas en un fichero de log cuyo nombre será backups.log que se almacenará en el directorio de logs de nuestras herramientas del sistema /var/log/educatica. Si el directorio de logs no existe, el script se encargará de crearlo.

Para ello, el script primero tendrá que conocer la lista de usuarios del sistema, que son aquellos que utilizan como interprete de comandos /bin/bash o /bin/sh, excepto el usuario root.

Para cada usuario del sistema, se realizará una copia de seguridad de su directorio personal, cuya información tendremos que obtener del fichero de cuentas de usuario del sistema, en un fichero comprimido tar.gz dentro del directorio de backups del usuario en cuestión.

El directorio de backups de un usuario en nuestro sistema será un directorio con el nombre del usuario que estarán dentro del directorio /educatica/backups. De esta forma, el usuario marinapg tendrá como directorio de copias de seguridad el directorio /educatica/backups/marinapg.

Por supuesto, si no existe el directorio de backups de un usuario, tendremos que crearlo desde el script. Si tenemos que crear el directorio de backups lo indicaremos para que se almacene en el fichero de log de la herramienta de backups.

Dentro del directorio de backups del usuario, se creará un fichero tar.gz, que es un fichero comprimido, cuyo nombre será el nombre de la cuenta de usuario, seguido por la fecha y hora en la que se realizó la copia de seguridad, separado por un guión «-«. De esta forma, para marinapg copia de seguridad hecha el 13 de enero de 2026 a las 10:30 sería: marinapg-260113-1030.tar.gz

El fichero tar.gz contendrá el contenido del directorio personal de marinapg y todos sus subdirectorios, manteniendo tanto los permisos como la estructura de árbol.

Antes de realizar el proceso de copia de seguridad, lo indicaremos para que se almacene en el fichero de log, dando información de fecha y hora seguida de un mensaje que permita conocer que se va a iniciar la copia de seguridad del usuario en cuestión.

Después de terminar el proceso de copia de seguridad, informaremos de si la operación ha sido un éxito o si ha habido un fallo repitiendo el formato de mensaje: fecha y hora seguida de un mensaje que indique si todo ha ido bien o no.

Por último,almacenaremos en el fichero de log de la herramienta de backups información extendida con permisos, propietario y grupo así como tamaño del fichero tar.gz de copia de seguridad del usuario.

De esta forma, el script recorrerá la lista de información de usuarios del sistema realizando la copia de seguridad de cada usuario del sistema cómo se ha descrito.

Una vez el script esté completo y funcione correctamente, tenemos que programar el sistema para que ejecute el script de lunes a viernes a las 23:00.

Posible solución

Nos conectamos al sistema srv01

Creamos un script inicial que tan solo recorra la lista de usuarios con shell /bin/bash o /bin/sh menos root.

Si ejecutamos

Ahora con esta base tan solo tenemos que hacer lo que nos piden.

Voy a utilizar mousepad en srv01, así que cierro sesión y vuelvo a iniciarla exportando el servidor gráfico.

Instalo mousepad

Ahora lanzamos mousepad a ver que pasa

Hemos exportado el servicio de visualización del servidor X en el sistema xfce, sin embargo mousepad se está ejecutando en srv01.

La función de backupUsaurio nos quedaría así

Ahora añadimos la parte en la que insertamos mensajes de log en el fichero de log.

Vamos a ver si funciona

Preparamos el script para que esté en el directorio de binarios del sistema y esté disponible desde cualquier directorio de trabajo.

Ahora lo metemos en el cron.d

Resumen rápido y sucio del enunciado

Crear copias de seguridad de cada usuario del sistema

Crear directorio de logs si no existe.

Directorio de logs: /var/log/educatica/

Fichero de log: /var/log/educatica/backups.log

Usuarios del sistema: menos root los que usen /bin/bash o /bin/sh –> fichero /etc/passwd

Para cada usuario del sistema –> Recorrer con un for

CopiaDeSeguridad usuario

Copia de seguridad del directorio personal – leerlo de /etc/passwd

¿dónde se guardará? Directorio de backups del usuario

Si no existe directorio de backups crear

/educatica/backups/<nombreUsuario>

/educatica/backups/<nombreUsuario>/<nombreUsuario>-YYMMDD-HHMM.tar.gz

Añadir al fichero de log

  • Antes de copia
  • Después de copia
  • Información del fichero tar.gz creado

Dejar una respuesta