Der Standard-System- und Dienstmanager der meisten Linux-Distributionen ist heute systemd
.
Der systemd-Prozess
ersetzt das SysV-Init
. Er wird als erster Prozess nach dem Booten des Kernels ausgeführt und ist dafür verantwortlich, den Linux-Host in einen Zustand zu versetzen, in dem er benutzt werden kann. Er ist für den Start und die Verwaltung der Dienste, das Mounten von Dateisystemen, die Verwaltung der Hardware, die Erzeugung der Anmeldeaufforderung und vieles mehr zuständig.
Ein entscheidender Vorteil gegenüber SysV ist, dass systemd so viele Dienste wie möglich parallel startet und damit den Startvorgang beschleunigt, so dass der Anmeldebildschirm schneller erscheint.
Einheiten
Die Elemente, die von systemd verwaltet werden, werden Units genannt. Die Unit-Dateien befinden sich in /lib/systemd/system
.
Dienst-Einheiten
Bei der Verwaltung von Diensten handelt es sich bei den Zieleinheiten um Diensteinheiten, die über Unit-Dateien mit der Endung .service verfügen.
Verwaltung von systemd-Diensten
Der Befehl zur Verwaltung von systemd-Einheiten ist systemctl
.
Starten und Stoppen von Diensten
Um einen systemd-Dienst zu starten, verwenden Sie den Befehl systemctl start:
$ sudo systemctl start name.service
Sie können die Endung .service weglassen. Um zum Beispiel den Apache-Server unter Ubuntu zu starten:
$ sudo systemctl start apache2
Um einen laufenden Dienst zu stoppen:
$ sudo systemctl stop name.service
Um also den Apache-Server unter Ubuntu zu stoppen:
$ sudo systemctl stop apache2
Neustart und Neuladen der Dienste
Um einen laufenden Dienst neu zu starten, verwenden Sie den Befehl restart:
$ sudo systemctl restart name.service
Und wenn nur das Neuladen der Konfigurationsdatei erforderlich ist
$ sudo systemctl reload name.service
Aktivieren und Deaktivieren von Diensten
Wenn Sie möchten, dass ein Dienst beim Systemstart automatisch gestartet wird, verwenden Sie den Befehl enable:
$ sudo systemctl enable name.service
Um den Start eines Dienstes beim Systemstart zu deaktivieren:
$ sudo systemctl disable name.service
Durch die Deaktivierung wird ein laufender Dienst nicht gestoppt.
Anzeigen des Dienststatus
Um Informationen über einen Dienst anzuzeigen:
$ sudo systemctl status name.service
Dies zeigt Ihnen den Status des Dienstes und die ersten Zeilen der Protokolldatei an. Während der Dienst also läuft, ist die Ausgabe von
sudo systemctl status apache2
ist
apache2.service - Der Apache HTTP-Server
Geladen: geladen (/lib/systemd/system/apache2.service; aktiviert; Hersteller-Voreinstellung: aktiviert)
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Aktiv: aktiv (läuft) seit Tue 2020-05-19 22:11:36 UTC; vor 4 Tagen
Prozess: 116002 ExecReload=/usr/sbin/apachectl graceful (code=exited, status=0/SUCCESS)
Haupt-PID: 104165 (apache2)
Aufgaben: 55 (Grenze: 1024)
CGruppe: /system.slice/apache2.service
├─104165 /usr/sbin/apache2 -k start
├─116006 /usr/sbin/apache2 -k start
└─116007 /usr/sbin/apache2 -k start
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Starten des Apache HTTP Servers...
May 19 22:11:36 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wurde gestartet.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wird neu geladen.
May 21 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wurde neu geladen.
May 22 06:25:01 ubuntu18 systemd<x><x><x><x>[1]</x></x></x></x>: Der Apache HTTP Server wird neu geladen.
So überprüfen Sie, ob ein Dienst aktiv ist:
$ sudo systemctl is-active name.service
Während der Dienst apache2 läuft, lautet die Ausgabe des Befehls systemctl is-active also :
$ sudo systemctl is-active apache2
aktiv
Um zu überprüfen, ob ein Dienst aktiviert ist:
$ sudo systemctl is-enabled name.service.
Anzeigen des Systemstatus
Alle Befehle, die Sie bis jetzt gesehen haben, dienen der Verwaltung eines einzelnen Dienstes. Wenn Sie sich einen Überblick über den Systemstatus verschaffen wollen, verwenden Sie die folgende Befehlsgruppe:
Um alle Einheitentypen zu sehen
$ sudo systemctl -t help
Verfügbare Unit-Typen:
service
socket
ziel
gerät
mounten
automount
auslagern
timer
pfad
slice
bereich
Um alle installierten Einheiten aufzulisten, verwenden Sie list-unit-files
$ sudo systemctl list-unit-files
UNIT-DATEISTATUS
proc-sys-fs-binfmt_misc.automount statisch
-.mount generiert
boot-efi.mount generiert
dev-hugepages.mounten statisch
dev-mqueue.mount statisch
mnt.mount generiert
proc-sys-fs-binfmt_misc.mount statisch
sys-fs-fuse-connections.mounten statisch
sys-kernel-konfig.einhängen statisch
sys-kernel-debug.mount statisch
acpid.path aktiviert
apport-autoreport.pfad aktiviert
systemd-ask-password-konsole.pfad statisch
systemd-ask-password-plymouth.path statisch
systemd-ask-password-wall.path statisch
session-161.scope vorübergehend
accounts-daemon.service aktiviert
Die Ausgabe hat nur zwei Spalten Unit File und State. Der Status ist normalerweise aktiviert, deaktiviert, statisch oder maskiert.
- Statisch: Das bedeutet, dass die Einheit nicht aktiviert werden kann, eine einmalige Aktion ausführt oder von einer anderen Einheit abhängig ist und nicht selbst ausgeführt werden kann.
- Maskiert: Eine als maskiert aufgelistete Unit bedeutet, dass sie überhaupt nicht gestartet werden kann, da sie mit /dev/null verknüpft ist. Dies wird als Maskierung der Unit bezeichnet. Dadurch wird verhindert, dass der Dienst manuell oder automatisch gestartet werden kann.
Alle installierten Dienste auflisten
Der Befehl systemctl list-unit-files mit dem Filter -t oder -type service zeigt nur den Status der installierten Dienste an.
$ sudo systemctl list-unit-files -t service
STATUS DER EINHEITSDATEIEN
accounts-daemon.service aktiviert
acpid.service deaktiviert
apache-htcacheclean.service deaktiviert
apache-htcacheclean@.service deaktiviert
apache2.service aktiviert
apache2@.service deaktiviert
apparmor.service aktiviert
apport-autoreport.service statisch
apport-forward@.service statisch
apport.service generiert
apt-daily-upgrade.service statisch
apt-daily.service statisch
atd.service aktiviert
autovt@.service aktiviert
blk-availability.service aktiviert
bootlogd.service maskiert
bootlogs.service maskiert
Um alle aktiven Diensteinheiten zu sehen, verwenden Sie list-units mit dem Filter -t service
$ sudo systemctl list-units -t service
UNIT LOAD ACTIVE SUB DESCRIPTION
accounts-daemon.service geladen aktiv läuft Konten Dienst
apache2.service geladen aktiv läuft Der Apache HTTP Server
apparmor.service geladen aktiv beendet AppArmor Initialisierung
apport.service geladen aktiv beendet LSB: automatische Erstellung von Absturzberichten
atd.service geladen aktiv läuft Aufgeschobener Ausführungszeitplaner
blk-availability.service loaded active exited Verfügbarkeit von Blockgeräten
cloud-config.service loaded active exited Anwenden der in cloud-con angegebenen Einstellungen
cloud-final.service geladen aktiv beendet Ausführen von Cloud-Benutzer-/Final-Skripten
cloud-init-local.service geladen aktiv verlassen Initialer cloud-init Job (vor der Vernetzung)
cloud-init.service geladen aktiv verlassen Initialer Cloud-Init-Job (Metadaten-Service)
console-setup.service geladen aktiv beendet Konsolenschriftart und Tastaturbelegung festlegen
cron.service geladen aktiv läuft Regelmäßiges Hintergrundprogramm, das dae verarbeitet
Die Ausgabe enthält die folgenden Spalten:
- UNIT: Der Name der systemd-Diensteinheit
- LOAD: Zeigt an, ob die Unit-Definition richtig gelesen und geladen wurde
- ACTIVE: Beschreibt, ob die Einheit aktiv ist.
- SUB: Low-Level-Aktivierungsstatus der Einheit, der detailliertere Informationen über die Einheit liefert. Dies variiert je nach Einheitentyp.
- DESCRIPTION: Die Beschreibung der Serviceeinheit.
Schlussfolgerung
Ich hoffe, Sie haben einen Eindruck von der Verwendung von systemctl zur Verwaltung von Diensten unter Linux bekommen. Wenn Sie mehr erfahren möchten, können Sie sich diesen Linux Mastery Kurs ansehen.