Einfach erklärt
- systemd ist das erste Programm, das nach dem Kernel startet. Es hat die Prozessnummer 1.
- Es startet alle Dienste, passt auf sie auf und startet sie bei Bedarf neu.
- Alles, was systemd verwaltet, heißt Unit: ein Dienst, ein Mount, ein Timer.
- Ein Target ist ein Sammelpunkt. Erst wenn alle Units davor laufen, ist er erreicht. Er ersetzt die alten Runlevel.
- Alle Meldungen landen an einer Stelle, im Journal. Gelesen wird es mit journalctl.
Animation
Das Wichtigste
- Bedient wird systemd mit systemctl, die Logs liest man mit journalctl.
- start startet einen Dienst jetzt, enable beim nächsten Systemstart. Das sind zwei verschiedene Dinge.
- enable --now macht beides auf einmal.
- Der Name eines Dienstes endet auf .service. Die Endung darf man weglassen: ssh und ssh.service sind dasselbe.
- Standard-Target auf Servern ist multi-user.target (früher Runlevel 3), mit Oberfläche graphical.target (Runlevel 5).
Dienste bedienen
| Befehl |
Wirkung
|
| systemctl status ssh |
Zustand, Hauptprozess und die letzten Logzeilen
|
| systemctl start ssh |
jetzt starten
|
| systemctl stop ssh |
jetzt stoppen
|
| systemctl restart ssh |
stoppen und neu starten
|
| systemctl reload ssh |
Konfiguration neu lesen, ohne Neustart (nur wenn der Dienst das kann)
|
| systemctl enable ssh |
beim Systemstart starten
|
| systemctl disable ssh |
beim Systemstart nicht mehr starten
|
| systemctl enable --now ssh |
aktivieren und sofort starten
|
| systemctl is-active ssh |
nur: läuft er? (active / inactive / failed)
|
| systemctl is-enabled ssh |
nur: startet er beim Booten? (enabled / disabled)
|
Den Status lesen
● cron.service - Regular background program processing daemon
Loaded: loaded (/usr/lib/systemd/system/cron.service; enabled; preset: enabled)
Active: active (running) since Thu 2026-10-15 19:56:40 CEST; 1 day 20h ago
Main PID: 1711 (cron)
Tasks: 1 (limit: 76271)
Memory: 568K (peak: 2.6M)
CGroup: /system.slice/cron.service
└─1711 /usr/sbin/cron -f
| Zeile |
Bedeutung
|
| ● |
grün: läuft, weiß: gestoppt, rot: Fehler
|
| Loaded |
wo die Unit-Datei liegt, und enabled = startet beim Booten
|
| Active |
active (running) = läuft, inactive (dead) = gestoppt, failed = abgestürzt
|
| Main PID |
die Prozessnummer des Dienstes
|
| CGroup |
alle Prozesse, die zu diesem Dienst gehören
|
- Die Ausgabe hält an wie less. Mit q beenden, oder gleich mit --no-pager aufrufen.
Übersicht verschaffen
| Befehl |
Wirkung
|
| systemctl list-units --type=service |
alle geladenen Dienste
|
| systemctl list-units --type=service --state=running |
nur die laufenden
|
| systemctl --failed |
alles, was gescheitert ist
|
| systemctl list-unit-files --type=service |
alle installierten Dienste mit enabled / disabled
|
| systemctl list-timers |
geplante Aufgaben, der Nachfolger von cron
|
Logs lesen mit journalctl
| Befehl |
Wirkung
|
| journalctl -u ssh |
alle Meldungen eines Dienstes
|
| journalctl -u ssh -f |
live mitlesen, wie tail -f
|
| journalctl -u ssh -e |
ans Ende springen
|
| journalctl -b |
alles seit dem letzten Start
|
| journalctl -b -1 |
alles vom vorletzten Start
|
| journalctl -p err -b |
nur Fehler seit dem Start
|
| journalctl -u ssh --since "1 hour ago" |
nur die letzte Stunde
|
| journalctl -u ssh --since "2026-10-17 08:00" --until "2026-10-17 09:00" |
ein Zeitraum
|
| journalctl -k |
nur Kernelmeldungen, wie dmesg
|
- Normale Benutzer sehen nur ihre eigenen Meldungen. Für alles braucht man sudo oder die Gruppe adm.
Targets
| Befehl |
Wirkung
|
| systemctl get-default |
mit welchem Target das System startet
|
| systemctl set-default multi-user.target |
ab dem nächsten Start ohne Oberfläche
|
| systemctl isolate multi-user.target |
sofort wechseln, die Oberfläche wird beendet
|
| systemctl isolate rescue.target |
Rettungsmodus: nur Grundsystem und root-Shell
|
| systemctl default |
zurück zum Standard-Target
|
| Runlevel |
Target |
Bedeutung
|
| 0 |
poweroff.target |
ausschalten
|
| 1 |
rescue.target |
Rettungsmodus, alle Dateisysteme eingehängt, keine Dienste
|
| 3 |
multi-user.target |
Mehrbenutzer mit Netzwerk, ohne Oberfläche
|
| 5 |
graphical.target |
wie 3, dazu die grafische Oberfläche
|
| 6 |
reboot.target |
neu starten
|
| – |
emergency.target |
Notfall: nur / nur lesbar, sonst nichts
|
Ausschalten und Neustarten
- systemctl poweroff
- systemctl reboot
- systemctl suspend
Stolperfallen
- start ist nicht enable. Ein gestarteter Dienst ist nach dem Neustart wieder weg, wenn er nicht aktiviert ist.
- enable ist nicht start. Ein aktivierter Dienst läuft erst nach dem nächsten Neustart, außer mit enable --now.
- reload geht nur, wenn der Dienst es unterstützt. Sonst kommt: Job type reload is not applicable. Dann restart nehmen.
- Keine Logs zu sehen? Ohne sudo zeigt journalctl nur die eigenen Meldungen.
- Der Dienst startet nicht? Immer zuerst: systemctl status dienst und journalctl -u dienst -e
Aufgaben
Grundaufgaben
- Lassen Sie sich alle laufenden Dienste anzeigen. Wie viele sind es?
- Zeigen Sie den Status von ssh an. Seit wann läuft der Dienst, und welche PID hat er?
- Stoppen Sie ssh, prüfen Sie mit is-active und starten Sie ihn wieder.
- Lesen Sie live die Logs von ssh mit und melden Sie sich von einem zweiten Rechner per ssh an. Was erscheint?
- Prüfen Sie, ob cron beim Systemstart gestartet wird.
- Mit welchem Target startet Ihr System?
- Lassen Sie sich alle Fehlermeldungen seit dem letzten Start anzeigen.
Für Schnelle
- Deaktivieren Sie ssh, starten Sie neu und prüfen Sie, ob ssh läuft. Aktivieren Sie ihn danach mit einem einzigen Befehl wieder und starten Sie ihn gleichzeitig.
- Wechseln Sie mit isolate in den Rettungsmodus und wieder zurück. Was läuft dort noch?
- Lassen Sie sich die Logs vom vorletzten Systemstart anzeigen.
Weiter