Un timer para Vasilisa
Vasilisa es un script que ha estado cuidando de los ordenadores del centro. Su función original era liberar espacio en disco borrando los directorios de descargas y papelera de cada usuario cuando el disco no tenía mucho espacio libre.
Pero Vasilisa es tan diligente que pronto pasó a encargarse de nuevas funciones. A día de hoy sus tareas son:
- Publica algunas métricas para Prometheus con
textfile collector. - Si el espacio libre en disco es menor que 100GiB:
- Borra el directorio
~/Baixadesde cada usuario. - Borra el directorio
~/.local/share/Trashde cada usuario. - Limpia la cache de APT con
apt clean.
- Borra el directorio
- Si hay contenedores LXD en marcha los detiene.
- Borra los iconos que se encuentran en
/var/lib/AccountsService/icons. - Actualiza los paquetes Flatpak instalados.
- Realiza una petición a Sirin.
Inicialmente el script se ejecutaba en cada arranque de la máquina activado por un servicio de systemd activo para default.target.
Pero nuestra heroína se ha encontrado con dos problemas:
- Parte de su trabajo consiste en dejar una etiqueta para Prometheus con el tiempo de arranque de la máquina que retorna
systemd-analyze. Y este comando no devuelve el tiempo total que ha necesitado el arranque hasta que no ha concluido el arranque. - Intentar utilizar el comando
lxcantes de tiempo no funciona.
Así lo más razonable es cambiar la activación de Vasilisa para que se realice con un timer de systemd. De esta manera se puede programar para que se ejecute:
- 1 minuto después de haber completado el arranque.
- Cada 24 horas pues hay usuarios de portátil que tienen por costumbre bajar la tapa del equipo en lugar de apagar el ordenador.
El fichero /etc/systemd/system/vasilisa.timer será:
[Unit] Description=Ejecuta Vasilisa en el arranque y cada día. [Timer] OnBootSec=1min OnUnitActiveSec=1d [Install] WantedBy=timers.target
Y el fichero /etc/systemd/system/vasilisa.service será:
[Unit] Description=Vasilisa la sabia cuida de los equipos al arrancar y cada día. [Service] ExecStart=/opt/vasilisa
Y finalmente se podrá activar el timer con: ln -s /etc/systemd/system/vasilisa.timer /etc/systemd/system/timers.target/vasilisa.timer
Naturalmente el trabajo de preparar los equipos del centro recaerá en Ansible. Los playbooks del centro utilizan el rol vasilisa para esta tarea: https://github.com/vcarceler/playbooks-ubuntu2004/tree/master/roles/vasilisa.
Una vez desplegados los cambios se puede apreciar que el nuevo timer está activo y que:
- Se ha ejecutado hace 8 minutos (un minuto después del arranque).
- Si el ordenador sigue encendido se ejecutará de nuevo dentro de 1 día.
root@esobatx-104:~# systemctl list-timers vasilisa NEXT LEFT LAST PASSED UNIT ACTIVATES Wed 2020-12-30 14:20:09 CET 23h left Tue 2020-12-29 14:20:09 CET 8min ago vasilisa.timer vasilisa.service 1 timers listed. Pass --all to see loaded but inactive timers, too. root@esobatx-104:~#
Y el fichero de registro de la máquina queda reflejada la actividad de Vasilisa:
Dec 29 14:18:48 esobatx-104 systemd[1]: vasilisa.timer: Succeeded.
Dec 29 14:20:09 esobatx-104 vasilisa: There is something to do?
Dec 29 14:20:09 esobatx-104 vasilisa: Disk free: 80110976 Threshold: 104857600
Dec 29 14:20:09 esobatx-104 vasilisa: Disk free under threshold. Deleting files in Baixades & empty trash for every user.
Dec 29 14:20:09 esobatx-104 vasilisa: removing 1,0K /home/convidat/Baixades
Dec 29 14:20:09 esobatx-104 vasilisa: removed
Dec 29 14:20:09 esobatx-104 vasilisa: removing 1,0K /home/idiomes/Baixades
Dec 29 14:20:09 esobatx-104 vasilisa: removed
Dec 29 14:20:09 esobatx-104 vasilisa: removing 1,0K /home/usuariinstall/Baixades
Dec 29 14:20:09 esobatx-104 vasilisa: removed
Dec 29 14:20:09 esobatx-104 vasilisa: No more users
Dec 29 14:20:09 esobatx-104 vasilisa: apt-get clean
Dec 29 14:20:09 esobatx-104 vasilisa: Final disk usage: 8%
Dec 29 14:20:09 esobatx-104 vasilisa: There are LXD running containers?
Dec 29 14:20:18 esobatx-104 vasilisa: Comprobando actualizaciones flatpak
Dec 29 14:20:18 esobatx-104 vasilisa[4996]: Looking for updates…
Dec 29 14:20:19 esobatx-104 vasilisa[4996]: Nothing to do.
Dec 29 14:20:19 esobatx-104 vasilisa: Actualizaciones flatpak aplicadas
Dec 29 14:20:19 esobatx-104 vasilisa: There is nothing more to do.
Dec 29 14:20:19 esobatx-104 systemd[1]: vasilisa.service: Succeeded.
