Übersicht
systemd spielt eine zentrale Rolle bei der effizienten Verwaltung des Systemstartvorgangs, der Überwachung laufender Dienste und der Steuerung verschiedener Systemzustände. Im Gegensatz zur sequenziellen Ausführung von Skripten durch Init-Systeme verarbeitet systemd Dienste parallel basierend auf Abhängigkeiten, was die Startgeschwindigkeit erheblich verbessert. Dies ist ein wichtiger Faktor, der zur Leistung und Stabilität moderner Linux-Systeme beitählt.
Hauptmerkmale
Die Hauptmerkmale von systemd sind:
- Paralleler Start: Verkürzt die Startzeit, indem mehrere Dienste gleichzeitig ausgeführt werden, nachdem Dienstabhängigkeiten analysiert wurden.
- Integrierte Verwaltung: Verwaltet verschiedene Elemente wie Systemstart, Dienste, Geräte und Protokolle in einem einzigen Framework.
- Dienstüberwachung: Hilft bei einem stabilen Betrieb, indem Dienste bei Fehlern automatisch neu gestartet werden.
- Ersetzt Runlevel: Führt das Konzept der 'Targets' anstelle von Runlevels zur Steuerung des Systemzustands ein.
Beziehung zu Init
systemd ist der Nachfolger und Ersatz des traditionellen Init-Systems. Es übernimmt die Rolle des Systemstarts und -herunterfahrens, die von Init ausgeführt wurde, und fügt verbesserte Funktionen hinzu.
- Init: Der erste ausgeführte Prozess, der beim Booten die Datei `/etc/inittab` referenzierte und Skripte sequenziell basierend auf Runlevels ausführte.
- systemd: Ebenfalls der PID 1-Prozess, verwendet jedoch 'Targets' anstelle von Runlevels und verarbeitet Dienste parallel basierend auf Abhängigkeiten, was ihn schneller und flexibler macht.
- Kompatibilität: In den meisten modernen Linux-Systemen ist Init ein symbolischer Link zu systemd, sodass systemd die Init-Befehle ausführt.
Kernkonzepte
Dies sind die Kernkonzepte, die für das Verständnis von systemd unerlässlich sind.
Unit
Alle von systemd verwalteten Objekte (Dienste, Mountpunkte, Geräte usw.) werden als 'Units' definiert. Jede Unit hat eine Konfigurationsdatei (`*.service`, `*.mount` usw.), die eine bestimmte Aufgabe definiert.
- Service Unit: Verwaltet Hintergrundprozesse wie Webserver (nginx.service) oder Datenbanken (mysql.service).
- Target Unit: Dient der Gruppierung mehrerer Units. Ein Konzept, das Runlevels ersetzt; 'multi-user.target' bedeutet den Mehrbenutzermodus, 'graphical.target' den grafischen Modus.
- Mount Unit: Verwaltet Dateisystem-Mountpunkte.
systemctl
Das primäre Befehlszeilendienstprogramm zur Steuerung von systemd. Es wird zum Starten, Stoppen, Neustarten von Diensten oder zum Überprüfen des Unit-Status verwendet.
- Dienst starten: sudo systemctl start nginx
- Dienststatus prüfen: sudo systemctl status nginx
- System neu starten: sudo systemctl reboot
journalctl
Ein Befehl zum Abfragen von Systemprotokollen, die von systemd zentral verwaltet werden. Protokolle können nach Dienst, Zeit oder Priorität gefiltert werden.
- Alle Protokolle anzeigen: journalctl
- Protokolle eines bestimmten Dienstes anzeigen: journalctl -u nginx.service
- Echtzeit-Protokolle anzeigen: journalctl -f
Anwendungsbeispiele
Anwendungsbeispiele für die Kernbefehle systemctl und journalctl von systemd.
System-Boot-Target überprüfen
systemctl get-default
Überprüft, mit welchem Target das System gestartet wurde.
System herunterfahren
sudo systemctl poweroff
Fährt das System sicher über systemd herunter. Führt die gleiche Funktion wie der Befehl poweroff aus.
Bestimmten Dienst aktivieren/deaktivieren
sudo systemctl enable nginx
sudo systemctl disable nginx
Stellt ein, dass ein bestimmter Dienst beim Systemstart automatisch gestartet wird, oder deaktiviert ihn.
Dienst neu starten
sudo systemctl restart nginx
Startet den laufenden Webserver-Dienst neu. Nützlich, wenn Konfigurationsdateien geändert wurden.
Tipps & Hinweise
Nützliche Hinweise zur Verwendung von systemd.
Tipps
- systemd-Unit-Dateien befinden sich hauptsächlich in den Verzeichnissen `/etc/systemd/system/` oder `/lib/systemd/system/`.
- systemd verwaltet die meisten Start-/Herunterfahrbefehle integriert. Daher sind `halt`, `reboot`, `poweroff` oft symbolische Links zu `systemctl`.
- Mit dem Befehl `systemctl status` können Sie nicht nur den Status eines Dienstes, sondern auch die neuesten Protokolle auf einmal überprüfen.