systemd
systemd ist auf den meisten modernen Linux-Distributionen der Init-Prozess (PID 1) —
das erste Programm, das der Kernel startet. Es ist dafür zuständig, alle weiteren Dienste
in der richtigen Reihenfolge zu starten und zu überwachen.
Units — die Bausteine von systemd
Abschnitt betitelt „Units — die Bausteine von systemd“Alles in systemd wird über sogenannte Units konfiguriert — Konfigurationsdateien mit festgelegten Typen:
| Typ | Endung | Bedeutung |
|---|---|---|
| Service | .service | Hintergrrunddienst (Daemon) |
| Timer | .timer | Zeitgesteuerter Auftrag (cron-Ersatz) |
| Socket | .socket | Socket-aktivierter Dienst |
| Target | .target | Gruppe von Units (Abhängigkeitspunkt) |
| Mount | .mount | Einhängepunkt |
| Device | .device | Gerätedatei |
Unit-Dateien liegen in:
/lib/systemd/system/— von Paketen installiert (nicht bearbeiten)/etc/systemd/system/— lokale Konfiguration (Overrides)~/.config/systemd/user/— Benutzer-Units
Dienste verwalten mit systemctl
Abschnitt betitelt „Dienste verwalten mit systemctl“# Status eines Dienstes anzeigensystemctl status nginx
# Dienst starten / stoppen / neustartensystemctl start nginxsystemctl stop nginxsystemctl restart nginx
# Dienst beim Systemstart aktivieren / deaktivierensystemctl enable nginxsystemctl disable nginx
# Direkt starten und aktivieren in einem Schrittsystemctl enable --now nginx
# Alle laufenden Dienste anzeigensystemctl list-units --type=service --state=running
# Alle fehlgeschlagenen Units anzeigensystemctl --failedDas System steuern
Abschnitt betitelt „Das System steuern“systemctl reboot # Neustartsystemctl poweroff # Herunterfahrensystemctl halt # CPU anhalten (ohne Strom abschalten)systemctl suspend # Ruhemodus (RAM)systemctl hibernate # Tiefschlaf (Festplatte)Targets — Systemzustände
Abschnitt betitelt „Targets — Systemzustände“Targets gruppieren Units und definieren Systemzustände (früher: Runlevel):
| Target | Beschreibung | Runlevel |
|---|---|---|
poweroff.target | System ausschalten | 0 |
rescue.target | Einzelbenutzer-Modus | 1 |
multi-user.target | Mehrbenutzer ohne GUI | 3 |
graphical.target | Mehrbenutzer mit GUI | 5 |
reboot.target | Neustart | 6 |
systemctl get-default # aktuelles Standard-Target anzeigensystemctl set-default multi-user.target # Standard-Target setzensystemctl isolate rescue.target # sofort in rescue-Modus wechselnLogs mit journalctl
Abschnitt betitelt „Logs mit journalctl“systemd protokolliert alle Dienst-Ausgaben im Journal:
journalctl # gesamtes Journal (älteste zuerst)journalctl -f # neue Einträge live verfolgen (wie tail -f)journalctl -u nginx # nur Logs von nginxjournalctl -u nginx -f # nginx-Logs live verfolgenjournalctl -b # Logs seit dem letzten Bootjournalctl -b -1 # Logs vom vorletzten Bootjournalctl --since "2024-01-01" # Logs ab einem Datumjournalctl --since "1 hour ago" # Logs der letzten Stundejournalctl -p err # nur Fehler (err, warning, info, debug)journalctl -xe # letzte Einträge mit Kontext (gut nach Fehlern)Eigene Service-Unit erstellen
Abschnitt betitelt „Eigene Service-Unit erstellen“Beispiel: einen einfachen Dienst einrichten, der ein Python-Skript ausführt:
[Unit]Description=Mein eigener DienstAfter=network.target
[Service]Type=simpleUser=www-dataWorkingDirectory=/opt/mein-appExecStart=/usr/bin/python3 /opt/mein-app/server.pyRestart=on-failureRestartSec=5
[Install]WantedBy=multi-user.targetsystemctl daemon-reload # systemd über neue Datei informierensystemctl enable --now mein-dienstDiagnose und Analyse
Abschnitt betitelt „Diagnose und Analyse“systemd-analyze # Bootzeit anzeigensystemd-analyze blame # Dienste nach Bootzeit sortiertsystemd-analyze critical-chain # kritischer Pfad beim Booten
systemctl list-dependencies nginx # Abhängigkeiten eines Dienstes