<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Stufe_2_Fortgeschritten</id>
	<title>Systemd Stufe 2 Fortgeschritten - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=Systemd_Stufe_2_Fortgeschritten"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;action=history"/>
	<updated>2026-10-21T13:45:51Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73785&amp;oldid=prev</id>
		<title>Thomas.will: Animation Units schreiben verlinkt</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73785&amp;oldid=prev"/>
		<updated>2026-10-17T15:53:34Z</updated>

		<summary type="html">&lt;p&gt;Animation Units schreiben verlinkt&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 17. Oktober 2026, 15:53 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l13&quot; &gt;Zeile 13:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 13:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Animation=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Animation=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;*[https://labs.xinux.net/systemd-units.html systemd: Units schreiben]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[https://labs.xinux.net/systemd-start.html#3-1 systemd: Was gegen Wann]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[https://labs.xinux.net/systemd-start.html#3-1 systemd: Was gegen Wann]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-73770:rev-73785 --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73770&amp;oldid=prev</id>
		<title>Thomas.will: Links zu Stufe 3 und Lernpfad</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73770&amp;oldid=prev"/>
		<updated>2026-10-17T15:33:57Z</updated>

		<summary type="html">&lt;p&gt;Links zu Stufe 3 und Lernpfad&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;de&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Nächstältere Version&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Version vom 17. Oktober 2026, 15:33 Uhr&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l3&quot; &gt;Zeile 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Stufe 1 · Basic !! Stufe 2 · Fortgeschritten !! Stufe 3 · Security&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;! Stufe 1 · Basic !! Stufe 2 · Fortgeschritten !! Stufe 3 · Security&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|-&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[Systemd Stufe 1 Basic|Ich verwende es]] || '''Ich schreibe Units''' || Ich härte und untersuche&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;| [[Systemd Stufe 1 Basic|Ich verwende es]] || '''Ich schreibe Units''' |&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;| [[Systemd Stufe 3 Security&lt;/ins&gt;|Ich härte und untersuche&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;|}&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l236&quot; &gt;Zeile 236:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Zeile 236:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Weiter=&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;=Weiter=&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[[Systemd Stufe 1 Basic|Zurück: Stufe 1]]&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*[[Systemd Stufe 1 Basic|Zurück: Stufe 1]]&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*Stufe 3: &lt;del class=&quot;diffchange diffchange-inline&quot;&gt;Härten &lt;/del&gt;und untersuchen&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;*&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;[[Systemd &lt;/ins&gt;Stufe 3 &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Security|Weiter&lt;/ins&gt;: &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;Stufe 3, härten &lt;/ins&gt;und untersuchen&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt; &lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;*[[Systemd Lernpfad|Übersicht: Lernpfad systemd]]&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;

&lt;!-- diff cache key my_wiki:diff::1.12:old-73764:rev-73770 --&gt;
&lt;/table&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
	<entry>
		<id>https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73764&amp;oldid=prev</id>
		<title>Thomas.will: Neue Seite: systemd Stufe 2 (Units schreiben)</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=Systemd_Stufe_2_Fortgeschritten&amp;diff=73764&amp;oldid=prev"/>
		<updated>2026-10-17T15:26:58Z</updated>

		<summary type="html">&lt;p&gt;Neue Seite: systemd Stufe 2 (Units schreiben)&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;[[Kategorie:systemd]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Stufe 1 · Basic !! Stufe 2 · Fortgeschritten !! Stufe 3 · Security&lt;br /&gt;
|-&lt;br /&gt;
| [[Systemd Stufe 1 Basic|Ich verwende es]] || '''Ich schreibe Units''' || Ich härte und untersuche&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=Einfach erklärt=&lt;br /&gt;
*Eine Unit ist eine kleine Textdatei. Sie beschreibt, '''was''' gestartet wird, '''wann''' und '''wovon''' es abhängt.&lt;br /&gt;
*Man schreibt kein Startskript mehr, sondern sagt systemd nur, was man haben will. Den Rest erledigt systemd.&lt;br /&gt;
*Units der Pakete liegen unter /usr/lib, eigene und geänderte Units unter /etc. Was in /etc liegt, gewinnt.&lt;br /&gt;
*'''Wants''' sagt, was mitgestartet wird. '''After''' sagt, was vorher fertig sein muss. Das sind zwei getrennte Dinge.&lt;br /&gt;
&lt;br /&gt;
=Animation=&lt;br /&gt;
*[https://labs.xinux.net/systemd-start.html#3-1 systemd: Was gegen Wann]&lt;br /&gt;
&lt;br /&gt;
=Wo Units liegen=&lt;br /&gt;
{{#drawio:systemd-unit-pfade}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Verzeichnis !! Wer schreibt dort !! Vorrang&lt;br /&gt;
|-&lt;br /&gt;
| /etc/systemd/system/ || der Admin || höchster&lt;br /&gt;
|-&lt;br /&gt;
| /run/systemd/system/ || Programme zur Laufzeit, weg nach dem Neustart || mittel&lt;br /&gt;
|-&lt;br /&gt;
| /usr/lib/systemd/system/ || die Pakete, wird bei Updates überschrieben || niedrigster&lt;br /&gt;
|}&lt;br /&gt;
*Liegt eine Unit mit gleichem Namen in /etc, wird die aus /usr/lib '''ignoriert'''.&lt;br /&gt;
*'''Drop-ins''' ändern nur einzelne Zeilen: /etc/systemd/system/'''name.service.d/override.conf'''&lt;br /&gt;
*'''systemctl cat name''' zeigt die Unit samt allen Drop-ins, so wie systemd sie wirklich sieht.&lt;br /&gt;
&lt;br /&gt;
=Aufbau einer Unit=&lt;br /&gt;
*vi /etc/systemd/system/simple-http.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Einfacher Webserver für Downloads&lt;br /&gt;
After=network.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=exec&lt;br /&gt;
User=kit&lt;br /&gt;
WorkingDirectory=/home/kit/Downloads&lt;br /&gt;
ExecStart=/usr/bin/python3 -m http.server 8000&lt;br /&gt;
Restart=on-failure&lt;br /&gt;
RestartSec=2&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;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Zeile !! Bedeutung&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | '''[Unit]''': Beschreibung und Abhängigkeiten&lt;br /&gt;
|-&lt;br /&gt;
| Description= || Text, der bei status und im Journal erscheint&lt;br /&gt;
|-&lt;br /&gt;
| After=network.target || erst starten, wenn die Netzwerkverwaltung läuft&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | '''[Service]''': wie der Dienst läuft&lt;br /&gt;
|-&lt;br /&gt;
| Type=exec || systemd startet das Programm und wartet, bis es wirklich ausgeführt wird&lt;br /&gt;
|-&lt;br /&gt;
| User=kit || läuft als Benutzer kit, nicht als root&lt;br /&gt;
|-&lt;br /&gt;
| WorkingDirectory= || in diesem Verzeichnis startet der Prozess, http.server zeigt genau dieses an&lt;br /&gt;
|-&lt;br /&gt;
| ExecStart= || der Befehl, immer mit '''absolutem Pfad'''&lt;br /&gt;
|-&lt;br /&gt;
| Restart=on-failure || bei Absturz oder Fehlercode neu starten&lt;br /&gt;
|-&lt;br /&gt;
| RestartSec=2 || 2 Sekunden warten vor dem Neustart&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | '''[Install]''': wird nur von enable und disable gelesen&lt;br /&gt;
|-&lt;br /&gt;
| WantedBy=multi-user.target || enable legt einen Link in multi-user.target.wants/ an&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==In Betrieb nehmen==&lt;br /&gt;
*systemctl daemon-reload&lt;br /&gt;
*systemctl enable --now simple-http&lt;br /&gt;
*systemctl status simple-http&lt;br /&gt;
*journalctl -fu simple-http&lt;br /&gt;
*sudo ss -lntp | grep 8000&lt;br /&gt;
*curl -s http://localhost:8000/ | head -3&lt;br /&gt;
*Achtung: http.server lauscht auf '''allen''' Netzwerkkarten. Nur lokal: '''--bind 127.0.0.1'''&lt;br /&gt;
&lt;br /&gt;
==Prüfen vor dem Start==&lt;br /&gt;
*systemd-analyze verify /etc/systemd/system/simple-http.service&lt;br /&gt;
*Keine Ausgabe heißt: keine Fehler gefunden.&lt;br /&gt;
&lt;br /&gt;
=Wants, Requires und After=&lt;br /&gt;
{{#drawio:systemd-wants-after}}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Anweisung !! Bedeutung !! Wenn die andere Unit scheitert&lt;br /&gt;
|-&lt;br /&gt;
| Wants=b || b wird mitgestartet || egal, a läuft trotzdem&lt;br /&gt;
|-&lt;br /&gt;
| Requires=b || b wird mitgestartet || a scheitert mit&lt;br /&gt;
|-&lt;br /&gt;
| After=b || a startet erst, wenn b fertig ist || startet nichts von selbst&lt;br /&gt;
|-&lt;br /&gt;
| Before=b || a muss fertig sein, bevor b startet || startet nichts von selbst&lt;br /&gt;
|}&lt;br /&gt;
*Wants und Requires sagen '''was''', After und Before sagen '''wann'''. Meist braucht man beides.&lt;br /&gt;
*'''After= allein''' startet nichts. Es ordnet nur, falls die andere Unit ohnehin gestartet wird.&lt;br /&gt;
*In der Praxis nimmt man fast immer '''Wants'''. Requires nur, wenn ohne die andere Unit wirklich nichts geht.&lt;br /&gt;
*'''network.target''': Die Netzwerkverwaltung läuft. Für Server, die lauschen, reicht das.&lt;br /&gt;
*'''network-online.target''': Es gibt wirklich eine Verbindung. Dann braucht man Wants= '''und''' After=.&lt;br /&gt;
&lt;br /&gt;
=Type=: wann ein Dienst als gestartet gilt=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Type !! Gestartet, wenn … !! Beispiel&lt;br /&gt;
|-&lt;br /&gt;
| simple || der Prozess angelegt ist || einfache Programme (Standard)&lt;br /&gt;
|-&lt;br /&gt;
| exec || das Programm wirklich ausgeführt wird, meldet Tippfehler im Pfad als Fehler || besser als simple&lt;br /&gt;
|-&lt;br /&gt;
| forking || der Startprozess sich beendet hat und ein Kind weiterläuft || alte Daemons&lt;br /&gt;
|-&lt;br /&gt;
| oneshot || das Programm '''fertig''' ist || Skripte, z.B. Firewall laden&lt;br /&gt;
|-&lt;br /&gt;
| notify || der Dienst selbst „bereit“ meldet || nginx, postgresql&lt;br /&gt;
|}&lt;br /&gt;
*Bei '''oneshot''' mit '''RemainAfterExit=yes''' bleibt die Unit nach dem Skript „active“. So kann ein späteres stop noch ExecStop= ausführen.&lt;br /&gt;
&lt;br /&gt;
=Restart=: wann neu gestartet wird=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Restart !! Exit-Code ≠ 0 !! Absturz durch Signal (kill -9, SIGSEGV) !! normales Ende&lt;br /&gt;
|-&lt;br /&gt;
| no || – || – || –&lt;br /&gt;
|-&lt;br /&gt;
| on-failure || ja || ja || –&lt;br /&gt;
|-&lt;br /&gt;
| on-abort || – || ja || –&lt;br /&gt;
|-&lt;br /&gt;
| always || ja || ja || ja&lt;br /&gt;
|}&lt;br /&gt;
*'''on-abort''' startet bei einem Python-Fehler (Exit-Code 1) '''nicht''' neu. Meist will man on-failure.&lt;br /&gt;
*Startet ein Dienst mehr als 5-mal in 10 Sekunden, gibt systemd auf: ''Start request repeated too quickly''. Danach hilft '''systemctl reset-failed name'''.&lt;br /&gt;
&lt;br /&gt;
=Units ändern=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Befehl !! Wirkung&lt;br /&gt;
|-&lt;br /&gt;
| systemctl edit ssh || legt einen Drop-in an, nur die Änderungen&lt;br /&gt;
|-&lt;br /&gt;
| systemctl edit --full ssh || kopiert die ganze Unit nach /etc&lt;br /&gt;
|-&lt;br /&gt;
| systemctl revert ssh || alle eigenen Änderungen verwerfen&lt;br /&gt;
|-&lt;br /&gt;
| systemctl daemon-reload || nach Änderungen mit vi oder nano, nicht nötig nach systemctl edit&lt;br /&gt;
|}&lt;br /&gt;
*Besser '''edit''' als '''--full''': Bei --full bekommt man Änderungen aus Paket-Updates nicht mehr mit.&lt;br /&gt;
*Einen Wert '''ersetzen''' statt ergänzen, z.B. ExecStart: erst leeren, dann neu setzen.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Service]&lt;br /&gt;
ExecStart=&lt;br /&gt;
ExecStart=/usr/bin/python3 -m http.server 8080&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Timer statt cron=&lt;br /&gt;
*Ein Timer startet eine andere Unit. Beide heißen gleich: backup.timer startet backup.service.&lt;br /&gt;
*/etc/systemd/system/backup.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Nächtliches Backup&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
ExecStart=/usr/local/sbin/backup.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
*/etc/systemd/system/backup.timer&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Backup jede Nacht um 2 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;
*systemctl daemon-reload&lt;br /&gt;
*systemctl enable --now backup.timer&lt;br /&gt;
*systemctl list-timers backup.timer&lt;br /&gt;
*'''Persistent=true''': War der Rechner um 2 Uhr aus, läuft das Backup beim nächsten Start nach.&lt;br /&gt;
*Zeitangaben testen:&lt;br /&gt;
*systemd-analyze calendar &amp;quot;Mon *-*-* 02:00&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  Original form: Mon *-*-* 02:00&lt;br /&gt;
Normalized form: Mon *-*-* 02:00:00&lt;br /&gt;
    Next elapse: Mon 2026-10-19 02:00:00 CEST&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=Beispiel: Firewall vor dem Netz=&lt;br /&gt;
*Eine Firewall muss stehen, '''bevor''' das Netz hochkommt, sonst gibt es ein Zeitfenster ohne Schutz.&lt;br /&gt;
*/etc/systemd/system/firewall.service&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[Unit]&lt;br /&gt;
Description=Firewall-Regeln laden&lt;br /&gt;
Before=network-pre.target&lt;br /&gt;
Wants=network-pre.target&lt;br /&gt;
&lt;br /&gt;
[Service]&lt;br /&gt;
Type=oneshot&lt;br /&gt;
RemainAfterExit=yes&lt;br /&gt;
ExecStart=/usr/local/sbin/firewall start&lt;br /&gt;
ExecStop=/usr/local/sbin/firewall stop&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;
=Stolperfallen=&lt;br /&gt;
*'''daemon-reload vergessen.''' systemd arbeitet dann mit der alten Version weiter. status warnt: ''changed on disk''.&lt;br /&gt;
*'''Kein Shell.''' In ExecStart= gehen keine Umleitungen und Pipes. Dafür: ExecStart=/bin/bash -c &amp;quot;befehl &amp;amp;gt;&amp;amp;gt; /tmp/log&amp;quot;&lt;br /&gt;
*'''Relativer Pfad.''' ExecStart= braucht den vollen Pfad, sonst ''status=203/EXEC''.&lt;br /&gt;
*'''Kein Zugriff.''' Darf User= nicht in WorkingDirectory=, kommt ''status=200/CHDIR''.&lt;br /&gt;
*'''Beim Timer den Timer aktivieren''', nicht den Service.&lt;br /&gt;
*'''Ganze Unit nach /etc kopiert.''' Updates des Pakets kommen nicht mehr an. Besser systemctl edit.&lt;br /&gt;
&lt;br /&gt;
=Aufgaben=&lt;br /&gt;
==Grundaufgaben==&lt;br /&gt;
#Lassen Sie sich mit systemctl cat die Unit von cron anzeigen. Wo liegt sie, und wovon hängt sie ab?&lt;br /&gt;
#Legen Sie simple-http.service an, starten Sie den Dienst und rufen Sie die Seite mit curl auf.&lt;br /&gt;
#Beenden Sie den Prozess mit kill -9 und beobachten Sie status. Was macht systemd?&lt;br /&gt;
#Ändern Sie mit systemctl edit den Port auf 8080. Prüfen Sie mit systemctl cat, was daraus geworden ist.&lt;br /&gt;
#Bauen Sie einen Dienst für den iperf3-Server (iperf3 -s), der als Benutzer nobody läuft.&lt;br /&gt;
#Schreiben Sie einen Timer, der jede Minute das Datum an /tmp/zeit.log anhängt.&lt;br /&gt;
==Für Schnelle==&lt;br /&gt;
#Ersetzen Sie Restart=on-failure durch on-abort. Lassen Sie den Dienst einmal mit kill -9 und einmal mit einem Fehlercode enden. Was ist der Unterschied?&lt;br /&gt;
#Bauen Sie einen Dienst, der sofort mit exit 1 endet und Restart=always hat. Was passiert nach einigen Sekunden?&lt;br /&gt;
#Schreiben Sie die Firewall-Unit und prüfen Sie mit systemd-analyze critical-chain network-pre.target, dass sie vor dem Netz startet.&lt;br /&gt;
&lt;br /&gt;
=Weiter=&lt;br /&gt;
*[[Systemd Stufe 1 Basic|Zurück: Stufe 1]]&lt;br /&gt;
*Stufe 3: Härten und untersuchen&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>