Si un service existe enabled
, il y a un lien symbolique quelque part dans
/etc/systemd/system
à un fichier d'unité, le plus souvent quelque part dans
/lib/systemd/system
Utilement, lorsque vous êtes enable
un service, les chemins complets du lien et de la cible créés seront imprimés sur stdout.
La désactivation du service supprime le lien symbolique, le fichier de l' unité elle - même est pas affectée, mais le service est pas chargé au prochain démarrage, lorsque systemd lectures /etc/systemd/system
.
Cependant, un service désactivé peut être chargé et sera démarré si un service qui en dépend est démarré ; enable
et disable
uniquement configurer le comportement de démarrage automatique pour les unités, et l'état est facilement remplacé.
Un service masqué est un service dont le fichier d'unité est un lien symbolique vers /dev/null
. Cela rend «impossible» le chargement du service, même s'il est requis par un autre service activé.
Lorsque vous êtes mask
un service, un lien symbolique est créé de /etc/systemd/system
à /dev/null
, laissant le fichier d'unité d'origine ailleurs intact. Lorsque vous unmask
un service, le lien symbolique est supprimé.
Cependant, j'ai remarqué que ces commandes ne sont pas toujours honorées.
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 le masque moi-même, échoue également (en silence). Je pense que c'est parce qu'il n'y a aucun fichier d'unité pour le service, sauf sous la forme d'un lien symbolique vers /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 vers /dev/null
et 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 est chargé et actif (quitté) bien qu'il n'ait pas de fichier d'unité.
Pour plus d'informations, cet article sur la façon d'utiliser Systemctl peut être utile.