Si un servicio es enabled
, entonces hay un enlace simbólico en algún lugar de
/etc/systemd/system
a un archivo de unidad, con mayor frecuencia en algún lugar de
/lib/systemd/system
De manera útil, cuando prestas enable
un servicio, las rutas completas del enlace y el destino creados se imprimirán en stdout.
Al deshabilitar el servicio, se elimina el enlace simbólico, por lo que el archivo de la unidad en sí no se ve afectado, pero el servicio no se carga en el próximo inicio, cuando se lee systemd /etc/systemd/system
.
Sin embargo, se puede cargar un servicio deshabilitado y se iniciará si se inicia un servicio que depende de él ; enable
y disable
solo configura el comportamiento de inicio automático para las unidades, y el estado se anula fácilmente.
Un servicio enmascarado es aquel cuyo archivo de unidad es un enlace simbólico /dev/null
. Esto hace que sea "imposible" cargar el servicio, incluso si es requerido por otro servicio habilitado.
Cuando se mask
presta un servicio, se crea un enlace simbólico desde /etc/systemd/system
hasta /dev/null
, dejando intacto el archivo de la unidad original en otro lugar. Cuando unmask
un servicio se elimina el enlace simbólico.
Sin embargo, he notado que estos comandos no siempre se cumplen.
Cuando intento enmascarar la mayoría de los servicios, falla:
$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument
Por supuesto, primero detuve el servicio. @Anwar sugiere que el enmascaramiento solo es posible para servicios no críticos.
Desenmascarar un servicio enmascarado, a menos que yo mismo lo haya enmascarado, también falla (en silencio). Creo que esto se debe a que no hay un archivo unitario para el servicio en ninguna parte, excepto en forma de enlace simbólico /dev/null
, esta vez en /lib/systemd/system
:
$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
Loaded: masked (/dev/null; bad)
Active: inactive (dead)
No soy el único que tiene este problema.
Para desenmascarar el servicio enmascarado x11-common, tuve que eliminar el enlace simbólico a /dev/null
y sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload
. Ahora, cuando lo consulto, systemctl status x11-common
veo que el servicio tiene un bonito círculo verde y está cargado y activo (salido) aunque no tiene un archivo unitario.
Para mayor referencia, este artículo sobre cómo usar Systemctl puede ser de alguna utilidad.