<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Systemd_mit_Rocky</id>
	<title>Systemd mit Rocky - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.ixheim.de/index.php?action=history&amp;feed=atom&amp;title=Systemd_mit_Rocky"/>
	<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Systemd_mit_Rocky&amp;action=history"/>
	<updated>2026-06-28T19:34:19Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.ixheim.de/index.php?title=Systemd_mit_Rocky&amp;diff=70266&amp;oldid=prev</id>
		<title>Thomas.will: 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…“</title>
		<link rel="alternate" type="text/html" href="https://wiki.ixheim.de/index.php?title=Systemd_mit_Rocky&amp;diff=70266&amp;oldid=prev"/>
		<updated>2026-05-20T07:47:57Z</updated>

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