Einführung in die Grundlagen von systemd
- WAS?
systemd
wird verwendet, um Systemeinstellungen und Dienste zu verwalten.systemd
organisiert Aufgaben in Komponenten, die Units genannt werden, und Gruppen von Units in Zielen.- WARUM?
Lernen Sie die Grundlagen von
systemd
kennen, zu denen wesentliche Funktionen wie Dienstverwaltung, Verfolgung von Abhängigkeiten, Protokollierung, Ressourcenverwaltung, Socket-Aktivierung und Systemsteuerung gehören.- AUFWAND
20 Minuten Lesedauer.
- ANFORDERUNGEN
Grundlegende Kenntnisse von Linux-Kommandos
Grundlegendes Verständnis von Linux-Prozessen, Daemons und Kontrollgruppen
1 Was ist systemd
? #
systemd
ist ein System- und Dienstmanager für Linux-Betriebssysteme. Dies ist das Standardinitialisierungssystem für wichtige Linux-Distributionen. systemd
wird nicht direkt vom Benutzer initiiert, sondern über /sbin/init
installiert und beim ersten Booten gestartet. systemd
fungiert als Init-System, das als erster Prozess beim Booten (PID 1) die Dienste im Benutzerbereich aufruft und verwaltet. PID 1 wird als init bezeichnet und ist der erste Linux-Prozess, der im Benutzermodus erstellt wird. Er wird bis zum Herunterfahren des Systems ausgeführt.
systemd
besitzt PID 1 und wird direkt vom Kernel gestartet. Alle anderen Prozesse werden entweder direkt von systemd
oder von einem seiner untergeordneten Prozesse gestartet. systemd
hängt das Dateisystem des Hosts ein und verwaltet temporäre Dateien. Es ist abwärtskompatibel mit den SysV-init-Skripten. SysV ist ein Initialisierungssystem, das aus der Zeit vor systemd
stammt.
In systemd
ist eine Unit eine Ressource, von der das System weiß, wie es sie bearbeiten und verwalten kann. Dies ist das primäre Objekt, das von den systemd
-Werkzeugen verwendet wird. Diese Ressourcen werden mithilfe von Konfigurationsdateien definiert, den sogenannten Unit-Dateien.
systemctl
ist das zentrale Verwaltungswerkzeug für die Steuerung des init-Systems. Er wird verwendet, um den Zustand des systemd
-Systems und des Dienstmanagers zu untersuchen und zu kontrollieren.
Targets in systemd
sind Gruppen zusammengehöriger Units, die als Synchronisierungspunkte beim System-Bootvorgang fungieren. Target-Unit-Dateien haben die Dateinamenerweiterung .target
. In Target-Units sind verschiedene systemd
-Units über eine Kette von Abhängigkeiten gruppiert.
Für die Fehlersuche können Sie journalctl
verwenden, mit dem Protokollmeldungen aus dem systemd
-Journal abgefragt und angezeigt werden können.
Weitere Informationen zu systemd
finden Sie unter https://systemd.io und man 1 systemd
.
2 Der systemd
-Boot-Prozess #
Der erste Schritt im Boot-Prozess besteht darin, den Linux-Kernel zu laden, der die Hauptkomponente des Linux-Betriebssystems ist. Sobald der Kernel geladen ist, initialisiert er die Hardware und startet den systemd
-Prozess, der der erste Prozess ist, der auf dem System läuft.
2.1 Der Linux-Boot-Prozess #
Der Boot-Prozess von Linux ist die erste Phase des Starts des Betriebssystems. Es ist der Prozess, mit dem das Betriebssystem den Speicher lädt, die Komponenten initialisiert und die Ausführung von Benutzeranwendungen vorbereitet.
Der Boot- Prozess von Linux ist in vier Hauptphasen unterteilt:
- Phase 1: BIOS
Wenn Sie den Computer einschalten, startet der Computer das BIOS (Basic Input/Output System) und führt einen POST (Power On Self Test) durch. Dabei handelt es sich um eine Integritätsprüfung, die die Hardwarefunktionalität von Komponenten wie Festplatten, SSD, Tastatur, RAM, USB-Anschlüssen und sonstiger Hardware prüft. Wenn die Hardware wie erwartet funktioniert, geht der Boot- Prozess in die nächste Phase über.
- Phase 2: Bootloader
Sobald POST abgeschlossen ist, sucht BIOS nach dem Bootloader-Programm, das im MBR (Master Boot Record) gespeichert ist, und lädt es. Der MBR ist ein 512-Byte-Code, der sich in der Regel unter
/dev/sda
oder/dev/hda
befindet, je nach Architektur Ihrer Festplatte. Der MBR kann sich auch auf einer Live-USB- oder DVD-Installation von Linux befinden. BIOS lädt diesen MBR-Code und führt ihn aus.Es gibt drei Haupt-Bootloader in Linux: LILO, GRUB und GRUB2. Der GRUB2 (Grand Unified Bootloader) Bootloader ist der neueste und wichtigste Bootloader in modernen Linux-Distributionen. Die GRUB2-Konfigurationsdatei befindet sich in
/boot/grub2/grub2.cfg
. Sobald BIOS den GRUB2-Bootloader gefunden hat, führt es ihn aus und lädt ihn in den Hauptspeicher (RAM).- Phase 3: Initialisierung des Linux-Kernels
Der Linux-Kernel ist das Herzstück des Betriebssystems. In Ihrem Linux-System bildet der Kernel die Schnittstelle zur Hardware, steuert die Speicherverwaltung und verwaltet Prozesse. Der Bootloader lädt den ausgewählten Linux-Kernel. Der Kernel extrahiert sich selbst aus einer komprimierten Version und hängt das Root-Dateisystem ein. Er führt dann das
/sbin/init
-Programm aus.- Phase 4:
systemd
Der Kernel lädt
systemd
, einen System- und Dienstmanager für Linux-Betriebssysteme.systemd
führt dann alle anderen Initialisierungsprozesse aus.
2.2 Boot-Prozess mit systemd
#
Sobald der Kernel systemd
geladen hat, übernimmt systemd
und startet die anderen Systemdienste, die erforderlich sind, um das System zum Laufen zu bringen. Dazu gehören Dienste wie der Netzwerkdienst, der Anmeldemanager usw.
Der Boot-Prozess läuft in der Reihenfolge parallel ab, in der bestimmte Ziel-Units ausgeführt werden. systemd
verwendet die Datei /etc/systemd/system/default.target
, um das Ziel zu bestimmen, in das das Linux-System booten soll. Diese Datei ist ein Link zu graphical.target
, das den grafischen Anmeldemanager startet. systemd
aktiviert alle Ziel-Units, die Abhängigkeiten von default.target
sind, sowie rekursiv alle Abhängigkeiten dieser Abhängigkeiten. Sobald alle Dienste gestartet sind, ist Ihr System einsatzbereit und der Login-Manager wird angezeigt. Sie können sich nun anmelden und mit dem System arbeiten.
2.3 Analysieren der Leistung des System-Boot-Prozesses mit dem Kommando systemd-analyze
#
Analysieren Sie mit dem Kommando systemd-analyze
die Leistung des System-Boot-Prozesses. Mit dem Kommando können Sie auch andere Status- und Verfolgungsinformationen aus dem System- und Dienstmanager abrufen. Es wird verwendet, um zu überprüfen, ob die Dateien für die Units korrekt sind und um auf spezielle Funktionen zuzugreifen, die für die erweiterte Fehlersuche im Systemmanager nützlich sind.
Einige Beispiele:
- Anzeigen der Zeitdauer für den Systemstart
>
systemd-analyze time Startup finished in 3.404s (kernel) + 2.415s (initrd) + 13.125s (userspace) = 18.945s graphical.target reached after 13.117s in userspace- Abrufen einer Übersicht über den Boot-Prozess, einschließlich der gestarteten Dienste und der Zeit, die jeder Dienst zum Starten benötigt
>
systemd-analyze critical-chain The time when unit became active or started is printed after the "@" character. The time the unit took to start is printed after the "+" character. graphical.target @13.117s └─multi-user.target @13.117s └─getty.target @13.117s └─getty@tty1.service @13.116s └─plymouth-quit-wait.service @10.775s +2.338s └─systemd-user-sessions.service @10.769s +3ms └─remote-fs.target @10.764s └─iscsi.service @10.747s +16ms └─network-online.target @10.744s └─NetworkManager-wait-online.service @1.547s +9.197s └─NetworkManager.service @1.507s +37ms └─network-pre.target @1.504s └─wpa_supplicant.service @2.341s +5ms └─dbus.service @1.042s └─basic.target @1.036s └─sockets.target @1.036s └─snapd.socket @1.035s +590us └─sysinit.target @1.030s └─systemd-update-utmp.service @1.025s +5ms └─auditd.service @976ms +47ms └─systemd-tmpfiles-setup.service @964ms +9ms └─local-fs.target @962ms └─snapd.mounts.target @961ms └─snap-core18-2796.mount @417ms +543ms └─dev-loop9.device @961ms +628usMit diesem Kommando wird ein Baum der zeitkritischen Units entweder für jede der angegebenen Units oder für das Standardziel ausgedruckt. Die Initialisierung von Diensten kann von der Socket-Aktivierung und der parallelen Ausführung von Units abhängen. Ähnlich wie beim Kommando
blame
wird hier die Zeit angezeigt, die eine Unit benötigt, um sich zu aktivieren. Für Units wie Geräte-Units, die direkt in den aktiven Zustand übergehen, ist dies nicht definiert.- Anzeigen einer Liste von Diensten, die während des Boot-Prozesses gestartet wurden und entsprechend der Zeit angezeigt werden, die jeder Dienst benötigt
>
systemd-analyze blame 9.197s NetworkManager-wait-online.service 4.002s fwupd.service 2.338s plymouth-quit-wait.service 1.282s dracut-pre-udev.service 1.062s sys-devices-platform-serial8250-tty-ttyS0.device 1.062s dev-ttyS0.device 1.061s dev-ttyS1.device 1.061s sys-devices-platform-serial8250-tty-ttyS1.device 1.060s dev-ttyS11.device 1.060s sys-devices-platform-serial8250-tty-ttyS11.device 1.059s sys-devices-platform-serial8250-tty-ttyS13.device 1.059s dev-ttyS13.device 1.059s sys-devices-platform-serial8250-tty-ttyS10.device 1.059s dev-ttyS10.device 1.058s sys-devices-platform-serial8250-tty-ttyS14.device 1.058s dev-ttyS14.device 1.058s dev-ttyS12.device 1.058s sys-devices-platform-serial8250-tty-ttyS12.device 1.056s sys-devices-platform-serial8250-tty-ttyS17.deviceDie Initialisierung eines Dienstes kann langsam sein, weil er auf den Abschluss der Initialisierung eines anderen Dienstes wartet. Es wird die Zeit angezeigt, die eine Unit zum Aktivieren benötigt. Für Units wie Geräte-Units, die direkt in den aktiven Zustand übergehen, ist dies nicht definiert. Mit diesem Kommando werden keine Ergebnisse für Dienste mit
Type=simple
angezeigt, dasystemd
davon ausgeht, dass diese Dienste sofort gestartet werden. Daher können die Initialisierungsverzögerungen nicht analysiert werden.- Generieren einer Vektorgrafikdatei, die die Ereignisse während des Boot-Prozesses anzeigt
>
systemd-analyze plot > /temp/sample.svgMit diesem Kommando wird im Verzeichnis
temp
eine SVG-Datei erstellt. Bei der SVG-Datei handelt es sich um eine Textdatei, in der eine Reihe von Grafikvektoren festgelegt ist, die von Anwendungen wie LibreOffice Draw zur Erstellung einer Grafik verwendet werden.
3 Struktur einer Unit-Datei #
In systemd
ist eine Unit eine Ressource, von der das System weiß, wie es sie bearbeiten und verwalten kann. Dies ist das primäre Objekt, das von den systemd
-Werkzeugen verwendet wird. Diese Ressourcen werden mithilfe von Konfigurationsdateien definiert, den sogenannten Unit-Dateien. Wenn Sie bei der Arbeit systemd
bereits mit Unit-Dateien vertraut sind, läuft die Verwaltung für Sie einfacher ab. Unit-Dateien verwenden eine einfache und verständliche Syntax, mit der Sie den Zweck und die Auswirkungen einer Unit bei der Aktivierung leicht erkennen können. Unit-Dateien enthalten Abschnitte mit Direktiven, beispielsweise:
[Section] Directive1=value Directive2=value . . .
Unit-Dateitypen umfassen die folgenden Abschnitte:
-
[Unit]
Der erste Abschnitt in den meisten Unit-Dateien ist der Abschnitt
[Unit]
. In diesem Abschnitt definieren Sie die Metadaten der Unit-Datei und konfigurieren die Beziehung der Unit-Datei zu anderen Unit-Dateien. Dieser Abschnitt wird in der Regel an erster Stelle platziert, da er einen Überblick über die Unit-Datei gibt.-
[Automount] / [Mount] / [Path] / [Service] / [Slice] / [Socket] /[Swap] / [Timer]
Abschnitte mit Direktiven speziell für den jeweiligen Typ. Eine Liste der verfügbaren Typen finden Sie unter Abschnitt 4, „Unit-Dateitypen“. Beachten Sie, dass die Typen
device
,target
,snapshot
undscope
keinen typenspezifischen Abschnitt haben.-
[Install]
Dies ist oft der letzte Abschnitt in der Unit-Datei und ist optional. In diesem Abschnitt wird das Verhalten einer Unit-Datei definiert, wenn sie aktiviert oder deaktiviert wird. Wenn Sie eine Unit-Datei aktivieren, wird sie automatisch beim Booten gestartet. Je nach Unit besteht ggf. eine Abhängigkeit von anderen, zugehörigen Units, damit die Unit ordnungsgemäß arbeitet. Zum Beispiel benötigt
chrony
die AnweisungenAfter
,Wants
undBefore
, die alle Abhängigkeiten fürchrony
sind, damit es funktioniert.
systemd
-Dienstdatei #[Unit] Description=usbguard 1 [Service] ExecStart=/usr/sbin/usb-daemon 2 [Install] WantedBy=multi-user.target 3
Eine kurze und aussagekräftige Beschreibung, in der der Zweck der Dienstdatei erläutert wird. | |
Gibt das Programm an, das ausgeführt werden soll, wenn der Dienst gestartet wird. | |
Startet ein Mehrbenutzersystem mit Netzwerk und ohne grafische Umgebung. Mit dieser Direktive können Sie eine Abhängigkeitsbeziehung festlegen. |
4 Unit-Dateitypen #
Der Typ einer Unit geht aus ihrer Dateinamenerweiterung hervor. systemd
kategorisiert Units gemäß dem Typ der Ressource, den sie beschreiben.
Verfügbare Unit-Dateitypen für systemd
-
.service
Beschreibt, wie ein Dienst oder eine Anwendung verwaltet wird. Dazu gehört, wie Sie den Dienst starten oder stoppen, seine Konfigurationsdatei neu laden (falls zutreffend), unter welchen Bedingungen der Dienst automatisch startet sowie die Abhängigkeit oder die Hierarchieinformationen für zugehörige Unit-Dateien.
-
.scope
Diese Unit-Datei wird von
systemd
automatisch aus den von der D-Bus-Schnittstelle empfangenen Informationen erstellt und dient der Verwaltung von extern festgelegten Systemprozessen.-
.path
Definiert einen Pfad für die pfadbasierte Aktivierung. Standardmäßig wird eine
.service
-Unit-Datei mit demselben Basisnamen aktiviert.inotify
ist eine Kernel-API und wird von Programmen verwendet, die über Änderungen an Dateien benachrichtigt werden sollen.-
.snapshot
Das Kommando
systemctl snapshot
erstellt automatisch eine.snapshot
-Unit-Datei. Dieses Kommando erstellt temporäre Snapshots mit dem aktuellen Systemstatus. Sie können den aktuellen Systemstatus bearbeiten, nachdem Sie Änderungen vorgenommen haben. Die Snapshots ermöglichen ein Rollback eines temporären Status.-
.timer
Definiert einen Zeitgeber, der von
systemd
verwaltet wird. Dies ist mit einem Cron-Auftrag für die verzögerte oder geplante Aktivierung vergleichbar. Beim Erreichen des Zeitgebers wird eine Unit-Datei mit demselben Namen, jedoch mit der Dateinamenerweiterung.service
gestartet.-
.slice
Verknüpfte Linux-Steuerungsgruppenknoten, mit denen Ressourcen zu Prozessen zugewiesen (oder auf Prozesse beschränkt) werden, die mit dem Abschnitt verknüpft sind. Der Name weist auf die Hierarchie in der Steuerungsgruppen-Baumstruktur hin. Units werden standardmäßig nach ihrem Typ in Abschnitte platziert.
-
.target
Führt die Synchronisierung für andere Units bei einem Bootvorgang oder einer Statusänderung durch oder versetzt das System in einen neuen Status. Andere Units geben ihre Beziehung zu Targets an, damit sie mit den Vorgängen des Targets synchronisiert werden.
-
.socket
Beschreibt ein Netzwerk, einen IPC-Socket oder einen FIFO-Puffer, mit dem
systemd
die socketbasierte Aktivierung durchführt. Es gibt eine verknüpfte.service
-Datei, die gestartet wird, wenn eine Aktivität auf dem Socket festgestellt wird, der in dieser Unit definiert ist.-
.device
Definiert ein Gerät, das für die
systemd
-Verwaltung durch dasudev
- odersysfs
-Dateisystem bestimmt ist. Die.device
-Datei ist nicht auf allen Geräten vorhanden. Diese Unit-Datei ist für das Sortieren und Einhängen eines Geräts sowie für den Zugriff auf das betreffende Gerät erforderlich.-
.swap
Definiert den Swap-Speicher im System. Der Name der Unit-Datei muss den Geräte- oder Dateipfad des Raums wiedergeben.
-
.mount
Definiert einen Einhängepunkt im System, der von
systemd
verwaltet werden soll. Diese Datei ist nach dem Einhängepfad benannt, wobei die Schrägstriche in Bindestriche umgewandelt werden. Für Einträge in/etc/fstab
können Units automatisch erstellt werden.-
.automount
Definiert einen Einhängepunkt, der automatisch eingehängt wird. Benennen Sie die Datei nach dem Einhängepunkt, auf den sie sich bezieht. Eine passende
.mount
-Unit-Datei ist erforderlich, in der die Einzelheiten für das Einhängen definiert werden.
5 Abhängigkeiten und Reihenfolge der Units #
systemd
hat zwei Arten von Abhängigkeiten: Anforderungs- und Auftragsabhängigkeiten. Anforderungs-Abhängigkeiten geben an, welche anderen Units beim Aktivieren einer Unit entweder gestartet oder gestoppt werden müssen. Reihenfolgen-Abhängigkeiten geben die Reihenfolge an, in der die Units gestartet werden müssen.
Unit-Abhängigkeiten
Unit-Dateien nutzen die Abhängigkeitsfunktion. Für eine Unit sind ggf. eine oder mehrere andere Units wünschenswert oder erforderlich, bevor die betreffende Unit ausgeführt werden kann. Diese Abhängigkeiten werden in Unit-Dateien mit den Anweisungen Wants
und Requires
festgelegt
-
Wants
Wenn Unit A beispielsweise
Wants=unit B
enthält, wird beim Ausführen von Unit A auch Unit B ausgeführt. Doch ob Unit B erfolgreich startet oder nicht, wirkt sich nicht auf die erfolgreiche Ausführung von Unit A aus.-
Requires
Enthält Unit A den Eintrag
Requires=unit B
, werden beide Units ausgeführt, doch wenn Unit B nicht erfolgreich ausgeführt wird, wird Unit A deaktiviert. Dabei spielt es keine Rolle, ob die Prozesse von Unit A erfolgreich ausgeführt worden wären.
Unit-Reihenfolge
Ohne genaue Anweisungen kann systemd
eine Gruppe von Units gleichzeitig ausführen. Das Starten der Dienste in der richtigen Reihenfolge ist für die ordnungsgemäße Funktionsfähigkeit des Linux-Systems wichtig. Sie können die Reihenfolge mit den Anweisungen Before
und After
für die Unit-Datei festlegen.
-
Before
Wenn Unit A beispielsweise
Before=unit B
enthält, wird beim Ausführen der beiden Units zunächst Unit A vollständig ausgeführt und dann erst Unit B.-
After
Wenn Unit A den Eintrag
After=unit B
enthält, wird beim Ausführen der beiden Units zunächst Unit B vollständig ausgeführt und dann erst Unit A.
6 Protokollierung #
Protokolldateien und Journale sind wichtig für die Systemverwaltung. Sie liefern detaillierte Informationen über ein System und sind sehr wichtig für die Fehlersuche und Revision. Protokolldateien enthalten Ereignisse und Meldungen, die vom Kernel, den Anwendungen und den Benutzern, die sich am System anmelden, erzeugt werden. Mit dem Kommando journalctl
können Sie das Journal abfragen. Dieses Kommando zeigt Protokolle an, die von systemd
erfasst wurden. Der systemd-journald
-Dienst steuert die Protokollerfassung durch systemd
. systemd-journald
speichert die Ereignisse und Meldungen in einem binären Format.
7 systemd
-Targets #
systemd
verwendet Units und Ziele. Eine systemd
-Unit definiert einen Dienst oder eine Aktion im System, die aus einem Namen, einem Typ und einer Konfigurationsdatei besteht. Ein systemd
-Ziel kombiniert mehrere Units und definiert, welche Dienste gestartet werden müssen, um das Ziel zu erreichen. Auf einem Server zum Beispiel ist dies ein Zustand, in dem das Netzwerk in Betrieb ist und sich mehrere Benutzer anmelden können. Diese Dateien sind an dem Suffix .target
erkennbar.
Ähnlich wie die Unit-Dateien können mehrere Targets mithilfe von Abhängigkeiten verschachtelt werden. Zum Beispiel benötigt multi-user.target
(unter anderem) die Ziele, die die Anmelde- und Benutzersitzungsdienste festlegen.
Gängige systemd
-Targets:
-
default.target
Bootet standardmäßig. Die Datei
default.target
ist ein symbolischer Link zur eigentlichen Target-Datei, z. B.graphical.target
für eine Desktop-Arbeitsstation. Für einen Server ist dies in der Regelgraphical.target
.-
poweroff.target
Fährt das System herunter und schaltet es aus.
-
rescue.target
Ziel-Unit, die das Basissystem abruft und eine Rettungs-Shell-Sitzung startet.
-
multi-user.target
Richtet ein nicht grafisches (Konsolen-)Mehrbenutzersystem ein.
-
graphical.target
Verwendet ein grafisches Mehrbenutzersystem mit Netzwerkdiensten.
-
reboot.target
Fährt das System herunter und bootet es neu.
Weitere Informationen zu systemd
-Zielen finden Sie unter man 5 systemd.target und man 7 systemd.special.
8 Verwenden von systemd
als normaler Benutzer #
Sie können systemd
als regulären Benutzer verwenden, um die Sicherheit zu erhöhen wurde oder wenn Sie keine root
-Benutzer-Rechte haben. Sie können einen Dienst ohne Rechte ausführen, indem Sie einen user
-Dienst erstellen.
Wenn Sie einen Benutzerdienst erstellen und verwenden, sollten Sie Folgendes beachten:
Benutzerdienstsitzungen werden beendet, wenn die Sitzung des Benutzers endet. Dieses Verhalten lässt sich mit dem Kommando
loginctl enable-linger USERNAME
überschreiben.Benutzerdienstdateien befinden sich unter
/etc/systemd/user
oder$HOME/.config/systemd/user/
.Sie können Benutzerdienste mit dem Kommando
systemctl --user
steuern.
9 systemctl
-Kommandos #
Das Kommando systemctl
wird verwendet, um den Zustand von systemd
und des Dienstmanagers zu untersuchen und zu kontrollieren.
Sie können die folgenden allgemeinen systemctl
-Kommandos verwenden und sich auf der Seite man systemctl informieren.
9.1 Anzeigen von systemd
-Informationen #
Zum Anzeigen von Informationen über systemd
-Komponenten können Sie die folgenden Kommandos verwenden:
- systemctl list-units
Listet die
systemd
-Units auf. Sie können die optionalen Argumente verwenden:--state=running
um die aktiven Units anzuzeigen und--type=service
, um die beendeten und aktiven Units anzuzeigen.- systemctl list-unit-files
Listet die
systemd
-Units und den Status auf, z. B. statisch, generiert, deaktiviert, Alias, maskiert und aktiviert.- systemctl list-dependencies
Zeigt die Abhängigkeits-Baumstruktur.
- systemctl list-dependencies UNIT_FILE
Listet die Abhängigkeiten einer Unit-Datei auf.
9.2 Verwalten von systemd
-Diensten #
Mit dem Kommando systemctl
können Sie die folgenden Aufgaben mit Diensten durchführen.
- systemctl status SERVICE
Prüft den Status des betreffenden Dienstes.
- systemctl show SERVICE
Zeigt die Dienstinformationen an.
- systemctl start SERVICE
Statt den Dienst manuell zu starten, verwenden Sie das Kommando
start
. Wenn eine Änderung an der Konfigurationsdatei vorgenommen wird, muss der zugehörige Dienst noch einmal gestartet werden.- systemctl stop SERVICE
Stoppt einem bestimmten laufenden Dienst.
- systemctl restart SERVICE
Statt den Dienst manuell neu zu starten, verwenden Sie das Kommando
restart
. Wenn eine Änderung an der Konfigurationsdatei vorgenommen wird, muss der zugehörige Dienst noch einmal neu gestartet werden.- systemctl enable SERVICE
Aktiviert den Dienst beim Booten.
- systemctl disable SERVICE
Deaktiviert den Dienst beim Booten.
- systemctl reload-or-restart SERVICE
Lädt den Dienst neu, sofern er das Neuladen unterstützt; ansonsten wird der Dienst neu gestartet. Wenn der Dienst nicht ausgeführt wird, wird er neu gestartet.
- systemctl mask SERVICE
Wenn dies maskiert ist, bedeutet dies, dass die Unit-Datei per Symlink mit
/dev/null
verbunden ist. Ein Symlink für einen maskierten Dienst wird in/etc/systemd/system
erstellt und verweist auf/dev/null
. Damit ist es selbst dann nicht möglich, den Dienst zu laden, wenn er für einen anderen aktivierten Dienst erforderlich ist. Er muss manuell gestoppt werden, ansonsten wird er im Hintergrund weiter ausgeführt. Mit der Option--runtime
können Sie die Maskierung temporär bis zum nächsten Neubooten des Systems anwenden.Created symlink /etc/systemd/system/FOSSLinux.service → /dev/null.
- systemctl unmask SERVICE
Demaskiert den Dienst. Dieser Punkt tritt in Kraft, wenn das System manuell gestartet oder neu gestartet wird.
9.3 Verwalten des Systemstatus #
Mit dem Kommando systemctl
können Sie Energieverwaltungsprozesse auf Ihrem System durchführen, beispielsweise Neustart, Herunterfahren usw., wie unten beschrieben.
- systemctl reboot
Bootet das System
reboot.target
neu.- systemctl poweroff
Schaltet das System
poweroff.target
aus.- systemctl emergency
Wechselt in den Notfallmodus
emergency.target
.- systemctl default
Wechselt zum Standard-Target
multi-user.target
zurück.
10 Fehlerbehebung für systemd
#
Mit den folgenden Tipps zur Fehlersuche können Sie Probleme mit systemd
-Diensten erkennen und beheben und einen reibungslosen Systembetrieb sicherstellen.
-
Syntax der
systemd
-Unit-Datei mit dem Kommandosystemd-analyze verify SERVICE
prüfen Bevor Sie einen
systemd
-Dienst starten oder aktivieren, prüfen Sie die Syntax der Unit-Datei daraufhin, ob eventuell Fehler vorliegen. Beispiel:>
sudo
systemd-analyze verify /etc/systemd/system/my-custom-service.serviceDas Kommando analysiert die Unit-Datei und meldet etwaige Syntaxfehler, fehlende Dateien oder andere Probleme. Sie müssen alle gemeldeten Probleme beheben, bevor Sie den Dienst aktivieren und starten.
-
Protokolle für den Dienst mit dem Kommando
journalctl -u SERVICE
prüfen Falls Probleme mit einem
systemd
-Dienst auftreten, prüfen Sie das Protokoll dieses Dienstes. Beispiel:>
sudo
journalctl -u my-custom-service.serviceDas Kommando zeigt Protokolle für den angegebenen Dienst, die alle Fehlermeldungen, Warnungen oder andere relevante Informationen enthalten. Anhand dieser Protokolle können Sie Probleme mit dem Dienst erkennen und beheben.
-
Bootvorgang mit dem Kommando
systemd-analyze plot
visualisieren Wenn ein Dienst während des Boot-Prozesses Probleme verursacht, können Sie mit
systemd-analyze plot command
den Boot-Prozess visualisieren und Probleme identifizieren. Beispiel:>
sudo
systemd-analyze plot > boot-plot.svgMit dem Kommando wird eine SVG-Datei namens
boot-plot.svg
erstellt, die eine grafische Darstellung des Boot-Prozesses und möglicher Probleme enthält. Dazu gehören auch die Start- und Endzeiten der einzelnen Dienste. Sie können diese Datei in einem SVG-kompatiblen Bildbetrachtungsprogramm oder Webbrowser öffnen und dann die Dienste analysieren, die Probleme beim Bootvorgang verursachen.- Fehlerbehebung für fehlerhafte Dienste
So finden Sie heraus, welche Dienste ausgefallen sind und können die Protokollausgabe einsehen:
>
sudo
systemctl --state=failed- Laufzeitstatus eines Dienstes prüfen
So ermitteln Sie den aktuellen Laufzeitstatus eines Dienstes:
>
sudo
systemctl status SERVICE- Herunterfahren oder Neubooten dauert lange
Wenn das Herunterfahren oder Neubooten lange dauert, kann dies darauf hinweisen, dass ein Dienst nicht geschlossen wird.
systemd
wartet eine gewisse Zeit ab, bis jeder Dienst geschlossen wird, bevor versucht wird, den betreffenden Dienst zu beenden. Häufig liegt das Problem daran, dass ein Dienst angehalten oder sich beim Herunterfahren aufgehängt hat. So klären Sie diesen Punkt:>
sudo
systemctl poweroff Failed to power off system via logind: There's already a shutdown or sleep operation in progress>
sudo
systemctl list-jobsSie können die laufenden und wartenden Aufträge abbrechen und erneut herunterfahren oder neu starten:
>
sudo
systemctl cancel>
sudo
systemctl stop systemd-suspend.service
11 Bewährte Verfahren für systemd
#
Die bewährten Verfahren helfen Ihnen dabei, effiziente systemd
-Dienste zu erhalten, die verschiedene Situationen bewältigen können.
- Laufzeitstatus eines Dienstes prüfen
So ermitteln Sie den aktuellen Laufzeitstatus eines Dienstes:
>
sudo
systemctl status SERVICE-
Den absoluten Pfad in der
systemd
-Unit-Datei angeben Verwenden Sie einen absoluten Pfad für ausführbare Dateien und erforderliche Dateien, wie Konfigurationsdateien oder Skripte in Ihrer Unit-Datei
systemd
.systemd
ermittelt den Speicherort der Dateien nicht anhand der Umgebungsvariablen des Benutzers wie$PATH
.- ExecReload-Direktive verwenden
Fügen Sie die Direktive ExecReload in den Abschnitt
[SERVICE]
ein, wenn Sie ein bestimmtes Kommando definieren möchten, das ausgeführt werden soll, sobald Sie einen Dienst mit dem Kommandosystemctl reload
neu laden. Diese Vorgehensweise eignet sich für Dienste, die ihre Konfiguration dynamisch ohne Neustart erneut laden können.[Service] ExecStart=PATH_TO_EXECUTABLE ExecReload=PATH_TO_RELOAD_SCRIPT
- RestartSec-Direktive verwenden
Fügen Sie die Direktive RestartSec in den Abschnitt
[SERVICE]
ein, wenn Sie eine Verzögerung (in Sekunden) definieren möchten, bevor der Dienst nach einem Fehler neu gestartet wird. Diese Vorgehensweise eignet sich für Dienste, bei denen es eine gewisse Zeit dauert, bis Ressourcen freigegeben werden. Außerdem können damit schnelle Neustartschleifen verhindert werden, die eine hohe Systemauslastung verursachen können.[Service] ExecStart=PATH_TO_EXECUTABLE Restart=on-failure RestartSec=5
- Notfallmodus auf einem entfernten Computer deaktivieren
Sie können den Notfallmodus auf einem entfernten Computer deaktivieren, z. B. auf einer virtuellen Maschine, die in der Google-Cloud gehostet wird. Wenn dieser Modus aktiviert ist, kann sich der betreffende Computer nicht mit dem Netzwerk verbinden. Beispiel:
>
sudo
systemctl mask emergency.service>
sudo
systemctl mask emergency.target
12 Rechtliche Hinweise #
Copyright © 2006–2024 SUSE LLC und Mitwirkende. Alle Rechte vorbehalten.
Es wird die Genehmigung erteilt, dieses Dokument unter den Bedingungen der GNU Free Documentation License, Version 1.2 oder (optional) Version 1.3 zu vervielfältigen, zu verbreiten und/oder zu verändern; die unveränderlichen Abschnitte hierbei sind der Urheberrechtshinweis und die Lizenzbedingungen. Eine Kopie dieser Lizenz (Version 1.2) finden Sie im Abschnitt „GNU Free Documentation License“.
Die SUSE Marken finden Sie im https://www.suse.com/company/legal/. Alle anderen Marken von Drittanbietern sind Besitz ihrer jeweiligen Eigentümer. Markensymbole (®, ™ usw.) kennzeichnen Marken von SUSE und ihren Tochtergesellschaften. Sternchen (*) kennzeichnen Marken von Drittanbietern.
Alle Informationen in diesem Buch wurden mit größter Sorgfalt zusammengestellt. Auch hierdurch kann jedoch keine hundertprozentige Richtigkeit gewährleistet werden. Weder SUSE LLC noch ihre Tochtergesellschaften noch die Autoren noch die Übersetzer können für mögliche Fehler und deren Folgen haftbar gemacht werden.