Wenn ein Dienst ist enabled
, dann gibt es irgendwo in einen Symlink
/etc/systemd/system
in eine Unit-Datei, meistens irgendwo in
/lib/systemd/system
Wenn Sie enable
einen Dienst in Anspruch nehmen, werden die vollständigen Pfade des erstellten Links und Ziels auf stdout gedruckt.
Durch Deaktivieren des Dienstes wird der Symlink gelöscht, sodass die Gerätedatei selbst nicht betroffen ist. Der Dienst wird jedoch beim nächsten Systemstart beim Lesen von systemd nicht geladen /etc/systemd/system
.
Ein deaktivierter Dienst kann jedoch geladen werden und wird gestartet, wenn ein davon abhängiger Dienst gestartet wird . enable
und disable
konfigurieren Sie das Autostart-Verhalten nur für Einheiten, und der Status kann leicht überschrieben werden.
Ein maskierter Dienst ist ein Dienst, zu dessen Unit-Datei ein Symlink besteht /dev/null
. Dies macht es "unmöglich", den Dienst zu laden, selbst wenn er von einem anderen aktivierten Dienst benötigt wird.
Bei mask
einem Service wird ein Symlink von /etc/systemd/system
bis erstellt /dev/null
, wobei die ursprüngliche Gerätedatei an einer anderen Stelle unberührt bleibt . Bei unmask
einem Service wird der Symlink gelöscht.
Ich habe jedoch festgestellt, dass diese Befehle nicht immer eingehalten werden.
Wenn ich versuche, die meisten Dienste zu maskieren, schlägt dies fehl:
$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument
Natürlich habe ich zuerst den Dienst eingestellt. @Anwar schlägt vor, dass die Maskierung nur für nicht kritische Dienste möglich ist.
Das Demaskieren eines maskierten Dienstes schlägt ebenfalls fehl (im Hintergrund), sofern ich ihn nicht selbst maskiert habe. Ich glaube, das liegt daran, dass es nirgendwo eine Unit-Datei für den Service gibt, außer in Form eines Symlinks zu /dev/null
, diesmal in /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)
Ich bin nicht der einzige, der dieses Problem hat
Um den maskierten Dienst x11-common tatsächlich zu demaskieren, musste ich den Symlink zu /dev/null
und löschen sudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload
. Wenn ich es jetzt mit systemctl status x11-common
abfrage, sehe ich, dass der Dienst einen schönen grünen Kreis hat und geladen und aktiv (beendet) ist, obwohl er keine Unit-Datei hat.
Zur weiteren Bezugnahme kann dieser Artikel über die Verwendung von Systemctl von Nutzen sein.