Während systemd viele Probleme mit der Systemverwaltung löst, ist es manchmal auch verwirrend.
Selbst eine einfache Aufgabe wie das Auflisten von systemd-Diensten könnte Sie zum Nachdenken anregen.
In diesem Artikel zeige ich Ihnen, wie Sie systemd-Dienste auflisten. Ich werde auch die Ausgabe erklären, damit Sie die verschiedenen Zustände der Dienste leichter verstehen können.
Ich nehme an, dass Sie etwas über Systemd wissen, aber selbst wenn Sie dies nicht tun, sollte es in Ordnung sein.
Wie man aktive Dienste in systemd auflistet
systemd-Dienste werden von systemctl
verwaltet Befehl. Wenn Sie systemctl
ausführen ohne irgendwelche Argumente ruft es die Voreinstellung list-units
auf Unterbefehl und listet verschiedene Arten von systemd-Einheiten wie Dienste, Sockets, Ziele usw. auf.
Aber Ihr Ziel ist es, die Dienste aufzulisten, also spezifizieren Sie den Gerätetyp mit --type
so kennzeichnen:
systemctl --type=service
Ist Ihnen aufgefallen, dass ich die list-units
nicht angegeben habe Unterbefehl, weil es der Standard ist? Wenn Sie der Konvention folgen möchten, können Sie dies ebenfalls angeben. Ich bevorzuge es so und werde mich im Rest des Tutorials an diese Konvention halten.
systemctl list-units --type=service
In beiden Fällen ist die Ausgabe gleich. Standardmäßig zeigt dieser Befehl nur geladene und aktive Dienste an in alphabetischer Reihenfolge:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
apparmor.service loaded active exited Load AppArmor profiles
apport.service loaded active exited LSB: automatic crash report generation
Lassen Sie mich die Ausgabe erklären:
UNIT
:Name der Systemeinheit.LOAD
: ob die Unit-Konfigurationsdatei von systemd geparst wurde.ACTIVE
:High-Level-Zustand der Einheit.SUB
:Low-Level-Zustand der Einheit. Eine aktive Einheit kann sich im laufenden Zustand oder im beendeten Zustand befinden. Dieser Wert hängt vom Diensttyp ab.
Wie Sie sehen können, könnten Sie die geladenen Dienste auf Ihrem Linux-System auflisten. Aber ein aktiver systemd-Dienst könnte laufen oder beendet werden (nach erfolgreicher Ausführung).
Alle laufenden systemd-Dienste auflisten
Der aktive Status kann auch einen Unterstatus haben, wie z. B. läuft, beendet usw. Sie können denselben --state
verwenden Flag mit dem Unterzustand.
Um die laufenden systemd-Dienste aufzulisten, verwenden Sie --state=running
so kennzeichnen:
systemctl list-units --type=service --state=running
Hier ist eine Beispielausgabe für mein System, die einige der laufenden systemd-Dienste zeigt:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
avahi-daemon.service loaded active running Avahi mDNS/DNS-SD Stack
bluetooth.service loaded active running Bluetooth service
bolt.service loaded active running Thunderbolt system service
Liste alle geladenen systemd-Dienste auf, einschließlich der inaktiven
Standardmäßig zeigt der Befehl systemctl nur die geladenen und aktiven Units an.
Wenn Sie alle geladenen Dienste einschließlich der inaktiven auflisten möchten, verwenden Sie --all
Flagge:
systemctl list-units --all --type=service
Sie können jetzt sogar die inaktiven Dienste sehen:
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service loaded active running Accounts Service
acpid.service loaded active running ACPI event daemon
alsa-restore.service loaded active exited Save/Restore Sound Card State
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apparmor.service loaded active exited Load AppArmor profiles
Alle inaktiven systemd-Dienste auflisten
Wenn Sie nur die inaktiven Dienste sehen möchten, können Sie verschiedene Flags wie --all
kombinieren und --state
so:
systemctl list-units --all --type=service --state=inactive
Wie Sie in der Ausgabe sehen können, werden alle inaktiven systemd-Dienste angezeigt:
UNIT LOAD ACTIVE SUB DESCRIPTION
alsa-state.service loaded inactive dead Manage Sound Card State (restore and store)
anacron.service loaded inactive dead Run anacron jobs
apport-autoreport.service loaded inactive dead Process error reports when automatic reporting is enabled
apt-daily-upgrade.service loaded inactive dead Daily apt upgrade and clean activities
apt-daily.service loaded inactive dead Daily apt download activities
● auditd.service not-found inactive dead auditd.service
Listen Sie alle installierten systemd-Dienste auf (auch wenn sie nicht geladen sind)
Jede systemd-Unit, sei es Dienst oder Socket oder irgendeine andere Unit, hat eine Unit-Datei, die
systemctl list-unit-files --type=service
Folgendes sollten Sie sehen:
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
acpid.service disabled enabled
alsa-restore.service static enabled
alsa-state.service static enabled
alsa-utils.service masked enabled
anacron.service enabled enabled
apparmor.service enabled enabled
apport-autoreport.service static enabled
[email protected] static enabled
Das Erklären jedes Zustandstyps wird zu langwierig und ist nicht Gegenstand dieses Artikels. Vielleicht schreibe ich in Zukunft darüber.
Listen Sie alle systemd-Dienste auf, die bei jedem Systemstart automatisch ausgeführt werden
Verwenden Sie diesen Befehl, um alle systemd-Dienste anzuzeigen, die bei jedem Systemstart automatisch ausgeführt werden:
systemctl list-unit-files --type=service --state=enabled
Sind Sie mit dem aktivierten Zustand verwechselt? Das ist normal. Viele neue Benutzer verwechseln einen aktivierten Systemdienst mit einem laufenden Dienst.
Ein aktivierter systemd-Dienst bedeutet jedoch, dass der Dienst automatisch aktiviert wird, wenn das System hochfährt.
UNIT FILE STATE VENDOR PRESET
accounts-daemon.service enabled enabled
anacron.service enabled enabled
apparmor.service enabled enabled
[email protected] enabled enabled
avahi-daemon.service enabled enabled
binfmt-support.service enabled enabled
bluetooth.service enabled enabled
console-setup.service enabled enabled
containerd.service enabled enabled
cron.service enabled enabled
cups-browsed.service enabled enabled
cups.service enabled enabled
dbus-fi.w1.wpa_supplicant1.service enabled enabled
Bemerken Sie das Vendor Preset? Es war auch im vorherigen Beispiel vorhanden.
Herstellervoreinstellung definiert das automatische Verhalten der systemd-Einheit, wenn ein Programm installiert wird.
Angenommen, Sie haben ein neues Programm XYZ installiert. Dieses XYZ hat einen systemd-Dienst namens xyz.service mit aktivierter Herstellervoreinstellung. Das bedeutet, dass nach der Installation des Programms beim Booten des Systems dieser xyz.service automatisch beim Booten aktiviert wird.
Wenn die Herstellervoreinstellung deaktiviert ist, müssen Sie sie manuell aktivieren. Sobald es aktiviert ist, startet es automatisch bei jedem Start.
sudo systemd enable xyz.service
Den Status eines bestimmten systemd-Dienstes anzeigen
Bisher haben Sie verschiedene Möglichkeiten zum Auflisten von Diensten kennengelernt. Aber nichts konzentriert sich auf einen einzelnen Dienst.
Mit dem status
erhalten Sie detaillierte Informationen zu einem systemd-Dienst Unterbefehl von systemctl. Tab-Vervollständigung funktioniert mit diesem Befehl.
systemctl status <service_name>
Hier ist ein Beispiel mit dem Netzwerk-Manager-Dienst:
[email protected]:~$ systemctl status NetworkManager.service
● NetworkManager.service - Network Manager
Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-07-23 08:12:44 IST; 3h 8min ago
Docs: man:NetworkManager(8)
Main PID: 711 (NetworkManager)
Tasks: 3 (limit: 9157)
Memory: 13.6M
CGroup: /system.slice/NetworkManager.service
└─711 /usr/sbin/NetworkManager --no-daemon
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7159] device (wlp58s0): Activation: successful, device activated.
Jul 23 08:12:50 itsfoss NetworkManager[711]: <info> [1595472170.7179] manager: startup complete
Jul 23 08:12:51 itsfoss NetworkManager[711]: <info> [1595472171.5592] manager: NetworkManager state is now CONNECTED_GLOBAL
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.7973] dhcp6 (wlp58s0): activation: beginning transaction (timeout in 45 seconds)
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8017] policy: set 'JioFi3_215810' (wlp58s0) as default for IPv6 routing and DNS
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8058] dhcp6 (wlp58s0): option dhcp6_name_servers => 'fe80::a8dc:79ff:fe1b:57fe'
Jul 23 08:12:52 itsfoss NetworkManager[711]: <info> [1595472172.8059] dhcp6 (wlp58s0): state changed unknown -> bound
Jul 23 08:12:59 itsfoss NetworkManager[711]: <info> [1595472179.9251] agent-manager: agent[bdd71d4a66098713,:1.84/org.gnome.Shell.NetworkAgent/1>
Jul 23 11:18:10 itsfoss NetworkManager[711]: <info> [1595483290.7874] manager: NetworkManager state is now CONNECTED_SITE
Jul 23 11:18:11 itsfoss NetworkManager[711]: <info> [1595483291.5893] manager: NetworkManager state is now CONNECTED_GLOBAL
Sie können sehen, dass es viele nützliche Informationen wie den Status des Dienstes, die Manpage des Dienstes, den verbrauchten Speicher, die Prozess-ID usw. liefert. Es zeigt auch die letzten paar Journald-Protokolle für den Dienst.
Wenn Sie in einem Shell-Skript überprüfen möchten, ob ein Dienst aktiv ist oder nicht, können Sie den is-active
verwenden Unterbefehl. Der Ausgang ist 0 für aktiv.
systemctl is-active application.service
Wenn Sie auf ähnliche Weise überprüfen möchten, ob ein Dienst aktiviert ist (so eingestellt ist, dass er beim Booten automatisch gestartet wird), können Sie is-enabled
verwenden Unterbefehl. Ausgang ist 0 für aktivierten Dienst.
systemctl is-enabled application.service
Schlussfolgerung
Ich denke, Sie haben jetzt ein besseres Verständnis für die Auflistung von systemd-Diensten. Ich hoffe, Sie haben ein paar neue Dinge über systemd und den systemctl-Befehl gelernt.
Zögern Sie nicht, Ihr Feedback, Ihre Fragen oder Vorschläge im Kommentarbereich zu hinterlassen.