Si un service est enabled
alors il y a un lien symbolique quelque part dans
/etc/systemd/system
dans un fichier d'unité, le plus souvent quelque part dans
/lib/systemd/system
Heureusement, lorsque vous enable
un service, les chemins complets du lien créé et de la cible seront imprimés sur stdout.
Désactivation de le service supprime le lien symbolique, de sorte que le fichier d'unité lui-même n'est pas affecté, mais le service n'est pas chargé au prochain démarrage, lorsque systemd lit /etc/systemd/system
.
Cependant, un service handicapé peut sera chargé, et sera lancé si un service qui en dépend est démarré ; enable
y disable
ne configurent le comportement de démarrage automatique que pour les unités, et l'état est facilement modifiable.
A masqué est un service dont le fichier d'unité est un lien symbolique à /dev/null
. Il est donc "impossible" de charger le service, même s'il est requis par un autre service activé.
Quand vous mask
un service, un lien symbolique est créé à partir de /etc/systemd/system
à /dev/null
en laissant le fichier de l'unité originale intact ailleurs. Lorsque vous unmask
un service, le lien symbolique est supprimé.
Cependant, j'ai remarqué que ces ordres ne sont pas toujours honorés.
Lorsque j'essaie de masquer la plupart des services, cela échoue :
$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument
Bien sûr, j'ai d'abord arrêté le service. @Anwar suggère que le masquage n'est possible que pour les services non critiques.
Démasquer un service masqué, à moins que je ne l'aie masqué moi-même, échoue également (silencieusement). I croire c'est parce qu'il n'y a pas de fichier d'unité pour le service, sauf sous la forme d'un lien symbolique à /dev/null
cette fois dans /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)
Je ne suis pas le seul à avoir ce problème.
Pour démasquer le service masqué x11-common, j'ai dû supprimer le lien symbolique à /dev/null
y sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload
. Maintenant, lorsque je l'interroge avec systemctl status x11-common
Je vois que le service a un joli cercle vert et qu'il est chargé et actif (exité) bien qu'il n'ait pas de fichier d'unité.
Pour plus d'informations, voir cet article sur Comment utiliser Systemctl peut être d'une certaine utilité.