Systemd mit Rocky: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „= Systemd = Systemd ist das Init-System und der Dienst-Manager unter Rocky Linux. Es startet beim Booten alle Prozesse, verwaltet Dienste, mountet Dateisystem…“) |
|||
| Zeile 50: | Zeile 50: | ||
|- | |- | ||
| systemctl enable --now <unit> || Aktivieren und sofort starten | | systemctl enable --now <unit> || Aktivieren und sofort starten | ||
| + | |- | ||
| + | | systemctl is-enabled <unit> || Ist der Dienst enabled? | ||
|- | |- | ||
| systemctl status <unit> || Status und letzte Logzeilen anzeigen | | systemctl status <unit> || Status und letzte Logzeilen anzeigen | ||
Version vom 8. Juli 2026, 13:27 Uhr
Systemd
Systemd ist das Init-System und der Dienst-Manager unter Rocky Linux. Es startet beim Booten alle Prozesse, verwaltet Dienste, mountet Dateisysteme und protokolliert Ereignisse. Alles dreht sich um sogenannte Units – kleine Konfigurationsdateien die beschreiben was gestartet, gemountet oder überwacht werden soll.
Units
- Eine Unit ist eine Konfigurationsdatei mit der Endung die ihren Typ beschreibt
| Unit-Typ | Endung | Beschreibung |
|---|---|---|
| Service | .service | Startet und überwacht einen Prozess |
| Timer | .timer | Führt eine Unit zeitgesteuert aus |
| Mount | .mount | Hängt ein Dateisystem ein |
| Target | .target | Gruppiert Units – vergleichbar mit Runleveln |
| Socket | .socket | Startet einen Dienst bei eingehender Verbindung |
Wo liegen Units?
| Pfad | Beschreibung |
|---|---|
| /lib/systemd/system/ | Vom System mitgelieferte Units – nicht anfassen |
| /etc/systemd/system/ | Eigene Units und Overrides – hier arbeiten wir |
systemctl
- Der zentrale Befehl zur Steuerung von Diensten und Units
| Befehl | Beschreibung |
|---|---|
| systemctl start <unit> | Unit starten |
| systemctl stop <unit> | Unit stoppen |
| systemctl restart <unit> | Unit neu starten |
| systemctl reload <unit> | Konfiguration neu laden ohne Neustart |
| systemctl enable <unit> | Unit beim Boot aktivieren |
| systemctl disable <unit> | Unit beim Boot deaktivieren |
| systemctl enable --now <unit> | Aktivieren und sofort starten |
| systemctl is-enabled <unit> | Ist der Dienst enabled? |
| systemctl status <unit> | Status und letzte Logzeilen anzeigen |
| systemctl is-active <unit> | Nur prüfen ob aktiv – gut für Skripte |
| systemctl list-units | Alle aktiven Units anzeigen |
| systemctl list-unit-files | Alle bekannten Units anzeigen |
| systemctl daemon-reload | Neue oder geänderte Units einlesen |
Service Unit
- Als Beispiel bauen wir einen einfachen HTTP-Server mit Python – der Webserver lauscht auf Port 8080 und liefert den Inhalt des aktuellen Verzeichnisses aus.
Unit-Datei erstellen
- vi /etc/systemd/system/webshare.service
[Unit] Description=Python HTTP Server auf Port 8080 After=network.target [Service] Type=simple User=nobody WorkingDirectory=/var/www/html ExecStart=/usr/bin/python3 -m http.server 8080 Restart=on-failure RestartSec=5 [Install] WantedBy=multi-user.target
Verzeichnis vorbereiten
- mkdir -p /var/www/html
- echo "Hallo vom Python HTTP Server" > /var/www/html/index.html
Dienst starten
- Nach jeder Änderung an einer Unit-Datei muss systemd neu eingelesen werden
- systemctl daemon-reload
- systemctl enable --now webshare.service
Firewall
- firewall-cmd --permanent --add-port=8080/tcp
- firewall-cmd --reload
Test
- curl http://localhost:8080
- systemctl status webshare.service
Erklärungen
- After=network.target
- Der Dienst startet erst nachdem das Netzwerk verfügbar ist.
- Type=simple
- systemd betrachtet den Prozess als gestartet sobald ExecStart läuft.
- Restart=on-failure
- Wenn der Prozess abstürzt startet systemd ihn automatisch neu – nach 5 Sekunden.
- WantedBy=multi-user.target
- Die Unit wird beim Erreichen des multi-user.target aktiviert – also beim normalen Systemstart ohne GUI.
Timer Unit
- Timer ersetzen Cronjobs – sie sind in systemd integriert, werden geloggt und können von anderen Units abhängen.
- Als Beispiel räumen wir täglich alte Logdateien auf.
Service Unit für den Cleanup
- vi /etc/systemd/system/log-cleanup.service
[Unit] Description=Alte Logdateien aufräumen [Service] Type=oneshot ExecStart=/usr/bin/find /var/log -name "*.log" -mtime +30 -delete
Timer Unit
- vi /etc/systemd/system/log-cleanup.timer
[Unit] Description=Log-Cleanup täglich um 02:00 Uhr [Timer] OnCalendar=*-*-* 02:00:00 Persistent=true [Install] WantedBy=timers.target
Timer aktivieren
- Nicht den Service – den Timer aktivieren
- systemctl daemon-reload
- systemctl enable --now log-cleanup.timer
Kontrolle
- Alle aktiven Timer anzeigen – mit nächstem und letztem Auführungszeitpunkt
- systemctl list-timers
Erklärungen
- Type=oneshot
- Der Service läuft einmal durch und beendet sich – kein dauerhafter Prozess.
- OnCalendar=*-*-* 02
- 00:00
- Täglich um 02:00 Uhr – Syntax: Jahr-Monat-Tag Stunde:Minute:Sekunde.
- Persistent=true
- Falls der Rechner um 02:00 ausgeschaltet war wird der Timer beim nächsten Start nachgeholt.
Mount Unit
- Mount Units hängen Dateisysteme ein – als Alternative zu /etc/fstab, aber mit allen systemd-Vorteilen wie Abhängigkeiten und Logging.
- Der Name der Unit-Datei muss dem Mountpunkt entsprechen – Slashes werden durch Bindestriche ersetzt.
- Beispiel
- /mnt/daten einbinden
Unit-Datei erstellen
- /mnt/daten → mnt-daten.mount
- vi /etc/systemd/system/mnt-daten.mount
[Unit] Description=Datenverzeichnis einbinden After=network.target [Mount] What=/dev/sdb1 Where=/mnt/daten Type=ext4 Options=defaults [Install] WantedBy=multi-user.target
NFS-Beispiel
- Für einen NFS-Share von einem anderen Server im Netz
- vi /etc/systemd/system/mnt-nfs.mount
[Unit] Description=NFS Share einbinden After=network-online.target Wants=network-online.target [Mount] What=ns.it2XX.int:/srv/share Where=/mnt/nfs Type=nfs Options=defaults,_netdev [Install] WantedBy=multi-user.target
Mount aktivieren
- systemctl daemon-reload
- systemctl enable --now mnt-daten.mount
Kontrolle
- systemctl status mnt-daten.mount
- findmnt /mnt/daten
Erklärungen
- What=
- Was eingebunden wird – Gerät, NFS-Share oder UUID.
- Where=
- Der Mountpunkt – muss als Verzeichnis existieren.
- _netdev
- Teilt systemd mit dass dieses Dateisystem Netzwerk benötigt – verhindert Hänger beim Boot.
Targets
- Targets gruppieren Units und definieren den Systemzustand – vergleichbar mit Runleveln unter SysV
| Target | Entspricht | Beschreibung |
|---|---|---|
| poweroff.target | Runlevel 0 | System ausschalten |
| rescue.target | Runlevel 1 | Einzelbenutzermodus |
| multi-user.target | Runlevel 3 | Mehrbenutzermodus ohne GUI |
| graphical.target | Runlevel 5 | Mehrbenutzermodus mit GUI |
| reboot.target | Runlevel 6 | Neustart |
- Aktuelles Target anzeigen
- systemctl get-default
- Standard-Target setzen – Boot ohne GUI
- systemctl set-default multi-user.target
- Standard-Target setzen – Boot mit GNOME
- systemctl set-default graphical.target
- In ein Target wechseln ohne Neustart
- systemctl isolate multi-user.target
journalctl
- journalctl ist das Werkzeug zum Lesen des systemd-Journals – alle Logs aller Dienste an einem Ort.
Grundlegende Befehle
| Befehl | Beschreibung |
|---|---|
| journalctl | Gesamtes Journal anzeigen |
| journalctl -f | Live mitverfolgen (wie tail -f) |
| journalctl -b | Nur aktueller Boot |
| journalctl -b -1 | Letzter Boot |
| journalctl -u sshd | Nur Logs von sshd |
| journalctl -fu sshd | sshd live verfolgen |
| journalctl -n 50 | Letzte 50 Zeilen |
| journalctl -p err | Nur Fehler anzeigen |
| journalctl --since "1 hour ago" | Letzte Stunde |
| journalctl --since "2025-06-01" --until "2025-06-02" | Zeitraum |
Prioritäten
| Kürzel | Priorität | Beschreibung |
|---|---|---|
| 0 | emerg | System nicht mehr nutzbar |
| 1 | alert | Sofortiger Handlungsbedarf |
| 2 | crit | Kritischer Fehler |
| 3 | err | Fehler |
| 4 | warning | Warnung |
| 5 | notice | Normaler aber wichtiger Hinweis |
| 6 | info | Informationen |
| 7 | debug | Debug-Ausgaben |
Persistentes Journal
- Standardmäßig wird das Journal nach einem Reboot gelöscht – mit dieser Einstellung bleibt es erhalten
- mkdir -p /var/log/journal
- vi /etc/systemd/journald.conf
[Journal] Storage=persistent SystemMaxUse=500M
- systemctl restart systemd-journald
Praktische Beispiele
- Fehler seit dem letzten Boot
- journalctl -b -p err
- firewalld live beobachten
- journalctl -fu firewalld
- named Logs der letzten Stunde
- journalctl -u named --since "1 hour ago"
- Alle Logs eines bestimmten Dienstes mit Kontext
- journalctl -u sshd -n 100 --no-pager