Systemd Stufe 1 Basic: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Neue Seite: systemd Stufe 1 (Basic)) |
(drawio Target-Leiter eingefügt) |
||
| Zeile 12: | Zeile 12: | ||
*Ein '''Target''' ist ein Sammelpunkt. Erst wenn alle Units davor laufen, ist er erreicht. Er ersetzt die alten Runlevel. | *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'''. | *Alle Meldungen landen an einer Stelle, im '''Journal'''. Gelesen wird es mit '''journalctl'''. | ||
| + | {{#drawio:systemd-targets}} | ||
=Animation= | =Animation= | ||
Version vom 17. Oktober 2026, 15:19 Uhr
| Stufe 1 · Basic | Stufe 2 · Fortgeschritten | Stufe 3 · Security |
|---|---|---|
| Ich verwende es | Ich schreibe Units | Ich härte und untersuche |
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
- systemctl status cron
● 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
- Stufe 2: Units selbst schreiben
