Un timer para Vasilisa

per Victor Carceler darrera modificació 2021-03-06T17:20:34+01:00

https://upload.wikimedia.org/wikipedia/commons/a/af/%D0%A6%D0%B0%D1%80%D0%B5%D0%B2%D0%BD%D0%B0_%D0%BB%D1%8F%D0%B3%D1%83%D1%88%D0%BA%D0%B0_2.jpgVasilisa 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:

  1. Publica algunas métricas para Prometheus con textfile collector.
  2. 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.
  3. Si hay contenedores LXD en marcha los detiene.
  4. Borra los iconos que se encuentran en /var/lib/AccountsService/icons.
  5. Actualiza los paquetes Flatpak instalados.
  6. 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:

  1. 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.
  2. 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.

Más información: