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
~/Baixades
de cada usuario. - Borra el directorio
~
/.local/share/Trash
de 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
lxc
antes 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.