Warum befinden sich einige systemd-Dienste im Status "maskiert"?

42

Wenn ich den Befehl ausführe sudo systemctl list-unit-files(ich denke, das sudo ist optional), erhalte ich eine Ausgabe, in der alle Dienste und ihr Status angezeigt werden.

Hier ist ein Ausschnitt von meinem Computer:

UNIT FILE                                  STATE
...
debian-fixup.service                       static  
debug-shell.service                        disabled
display-manager.service                    enabled 
dns-clean.service                          enabled 
dsmcad.service                             enabled 
emergency.service                          static  
failsafe-x.service                         static  
friendly-recovery.service                  masked  
fuse.service                               masked  
gdm.service                                masked  
getty-static.service                       static  
[email protected]                             enabled 
gpsd.service                               indirect
[email protected]                           static  
gpu-manager.service                        enabled 
halt-local.service                         static  
halt.service                               masked  
hostname.service                           masked
...

Ich frage mich, warum sich einige Dienste im Status "maskiert" befinden. Ich denke, dies bedeutet, "dies ist besser als" Deaktivieren ", da der Dienst weder von Hand noch von systemd gestartet werden kann".

Wie kann ich mehr Informationen über den Zustand einer Serviceeinheit erhalten?

Wer hat die Einheiten in ihren jeweiligen Zustand versetzt?

Ich habe zum Beispiel versucht, sudo systemctl help dsmcad- dass nur die documentation = ...Zeile aus der Unit-Datei aufruft./etc/systemd/system/dsmcad.service

Hinweis: Hier weiß ich genau, was der dsmcad-Dienst ist und was er tut. Ich habe ihn selbst installiert. Ich interessiere mich mehr für eine allgemeine Lösung.

knb
quelle

Antworten:

47

maskist eine stärkere Version von disable. Bei Verwendung disablealler Symlinks der angegebenen Unit-Datei werden diese entfernt. Bei Verwendung maskder Einheiten wird mit verknüpft /dev/null. Dies wird angezeigt, wenn Sie z systemctl status halt.service. B. durch überprüfen . Der Vorteil maskist, dass jegliche Aktivierung, auch manuell, verhindert wird.

Achtung: systemctl list-unit-fileslistet den Status der Gerätedateien auf (statisch, aktiviert, deaktiviert, maskiert, indirekt) und hat nichts mit dem Status des Dienstes zu tun. Um einen Blick auf die Dienste zu werfen , verwenden Sie systemctl list-units.

Kellerspeicher
quelle
7
Bitte erläutern Sie auf Wunsch auch, wie Sie den maskierten Zustand entfernen.
Erikbwork
19
Es gibt einen maskund einen unmaskBefehl, mit dem gearbeitet werden kann systemctl. Also tu es einfach systemctl unmask name_of_service.service.
Kellerspeicher
Dadurch systemctl unmask name_of_service.servicewurde meine Service-Definitionsdatei vollständig von entfernt /etc/systemd/system/, sodass ich sie jetzt wieder hinzufügen muss. Wenn es wieder maskiert wird, stecke ich in einer Schleife
Eldamir
1
Hallo Eldamir, in /etc/systemd/systemsind nur symbolische Links von Diensten. Sie sollten die *.serviceDatei /lib/systemd/systemdort hinzufügen , wo sie verlinkt wird, /etc/systemd/systemwenn Sie enableden Dienst nutzen. maskerstellt einen Link zu /dev/nullund unmaskentfernt diesen Link von /etc/systemd/systemund es macht offensichtlich keinen Unterschied, ob jemand eine Datei dort ablegt.
Kellerspeicher
3

hostname.servicewird als redundant maskiert, da systemdder Hostname (von / etc / hostname) sehr früh beim Start gesetzt wird.

Diese Einstellung wird vom Debian-Systemd-Paket bereitgestellt.

$ ls -l /lib/systemd/system/hostname.service
lrwxrwxrwx 1 root root 9 Apr  8 22:47 /lib/systemd/system/hostname.service -> /dev/null
$ dpkg-query --search /lib/systemd/system/hostname.service
systemd: /lib/systemd/system/hostname.service

Ebenso kann Debian jetzt ohne ein Shell-Skript auf haltdem System ausgeführt werden, es wird stattdessen von systemd-shutdown (Quellcode hier ) gehandhabt .

Wenn ein Dienst manuell maskiert wurde, wird die Maske stattdessen installiert /etc/systemd/system.

Dienste werden auch maskiert, wenn sie unter Debian / Ubuntu entfernt werden . Ich weiß nicht warum.

sourcejedi
quelle
0

Da Sie Informationen über den maskierten Status anfordern, ist es wichtig zu erwähnen, dass dies in einem Service beobachtet werden kann, der nach dem Start die Definitionen geändert, neu geladen (systemctl daemon-reload) und der neue Status NICHT in Ordnung ist . Ein leicht zu verstehendes Beispiel ist das folgende Szenario:

a) the service is running well (already started)
b) edit the service definition file and delete everything in its contents
c) reload
d) state masked will be observed too

Daher kann der maskierte Zustand von falschen Dienstdefinitionen herrühren. Daher kann der Benutzer durch unsachgemäße Bearbeitung des Dienstes zu einem entlarvten Status führen.

Beobachtung: Ich bin mir nicht sicher, ob es absichtlich passiert oder ob es sich um einen einfachen Fehler handelt (Standardoption), aber es können einige interessante Informationen zum Teilen sein

Thiago Conrado
quelle