% Systemd - service
Die grundlegenden und einführenden Informationen zu Systemd enthält die Handbuchseite Systemd-Start Die alle Unit-Dateien betreffenden Sektionen [Unit] und [Install] behandelt unsere Handbuchseite Systemd Unit-Datei
In der vorliegenden Handbuchseite erklären wir die Funktion der Unit systemd.service. Die Unit-Datei mit der Namensendung ".service" ist der am häufigsten anzutreffende Unit-Typ in systemd.
Die Service-Unit-Datei muss eine Sektion [Service] enthalten, die Informationen über den Dienst und den Prozess, den er überwacht, konfiguriert.
Selbst erstellte Unit-Dateien legen wir vorzugsweise im Verzeichnis /usr/local/lib/systemd/system/
ab. (Ggf. ist das Verzeichnis mit dem Befehl mkdir -p /usr/local/lib/systemd/system/
anzulegen.) Das hat den Vorteil, dass sie Vorrang gegenüber den System-Units, die durch den Paketverwalter der Distribution installiert wurden, erhalten und gleichzeitig Steuerungslinks sowie Änderungsdateien, die mit systemctl edit <UNIT_DATEI>
erzeugt wurden, im seinerseits vorrangigen Verzeichnis /etc/systemd/system/
abgelegt werden. Siehe: Hierarchie der Ladepfade.
Für diese Sektion sind über dreißig Optionen verfügbar, von denen wir hier besonders häufig verwendete beschreiben.
Type= PIDFile=
RemainAfterExit= GuessMainPID=
ExecStart= Restart=
ExecStartPre= RestartSec=
ExecStartPost= SuccessExitStatus=
ExecCondition= RestartPreventExitStatus=
ExecReload= RestartForceExitStatus=
ExecStop= NonBlocking=
ExecStopPost= NotifyAccess=
TimeoutStopSec= RootDirectoryStartOnly=
TimeoutStartSec= FileDescriptorStoreMax=
TimeoutAbortSec= USBFunctionDescriptors=
TimeoutSec= USBFunctionStrings=
RuntimeMaxSec= Sockets=
WatchdogSec= BusName=
OOMPolicy=
-
Type=
Definiert den Prozess-Starttyp und ist damit eine der wichtigsten Optionen.
Die möglichen Werte sind: simple, exec, forking, oneshot, dbus, notify oder idle.
Der Standard simple wird verwendet, fallsExecStart=
festgelegt ist, aber wederType=
nochBusName=
gesetzt sind.-
simple
Eine Unit vom Typ simple betrachtet systemd als erfolgreich gestartet, sobald der mitExecStart=
festgelegte Hauptprozess mittels fork gestartet wurde. Anschließend beginnt systemd sofort mit dem Starten von nachfolgenden Units, unabhängig davon, ob der Hauptprozess erfolgreich aufgerufen werden kann. -
exec
Ähnelt simple, jedoch wartet systemd mit dem Starten von nachfolgenden Units bis der Hauptprozess erfolgreich beendet wurde. Das ist auch der Zeitpunkt, an dem die Unit den Zustand "active" erreicht. -
forking
Hier betrachtet systemd den Dienst als gestartet, sobald der mitExecStart=
festgelegte Prozess sich in den Hintergrund verzweigt und das übergeordnete System sich beendet. Dieser Typ findet oft bei klassischen Daemons Anwendung. Hier sollte auch die OptionPIDFile=
angeben werden, damit das System den Hauptprozess weiter verfolgen kann. -
oneshot
Ähnelt exec. Die Option Type=oneshot kommt oft bei Skripten oder Befehlen zum Einsatz, die einen einzelnen Job erledigen und sich dann beenden. Allerdings erreicht der Dienst niemals den Zustand "active", sondern geht sofort, nachdem sich der Hauptprozess beendet hat, vom Zustand "activating" zu "deactivating" oder "dead" über. Deshalb ist es häufig sinnvoll diese Option mitRemainAfterExit=yes
zu verwenden, um den Zustand "active" zu erreichen. -
dbus
Verhält sich ähnlich zu simple, systemd startet nachfolgende Units, nachdem der D-Bus-Busname erlangt wurde. Units mit dieser Option, erhalten implizit eine Abhängigkeit auf die Unit dbus.socket. -
notify
Der Type=notify entspricht weitestgehend dem Type simple, mit dem Unterschied, dass der Daemon ein Signal an systemd sendet, wenn er bereitsteht. -
idle
Das Verhalten von idle ist sehr ähnlich zu simple; allerdings verzögert systemd die tatsächliche Ausführung des Dienstes, bis alle aktiven Aufträge erledigt sind. Dieser Typ ist nicht als allgemeines Werkzeug zum Sortieren von Units nützlich, denn er unterliegt einer Zeitüberschreitung von 5 s, nach der der Dienst auf jeden Fall ausgeführt wird.
-
-
RemainAfterExit=
Erwartet einen logischen Wert (Standard: no), der festlegt, ob der Dienst, selbst wenn sich alle seine Prozesse beendet haben, als aktiv betrachtet werden sollte. Siehe Type=oneshot. -
GuessMainPID=
Erwartet einen logischen Wert (Standard: yes). Systemd verwendet diese Option ausschließlich, wennType=forking
gesetzt undPIDFile=
nicht gesetzt ist, und versucht dann die Haupt-PID eines Dienstes zu raten, falls es sie nicht zuverlässig bestimmen kann. Für andere Typen oder mit gesetzter OptionPIDFile=
ist die Haupt-PID immer bekannt. -
PIDFile=
Akzeptiert einen Pfad zur PID-Datei des Dienstes. Für Dienste vomType=forking
wird die Verwendung dieser Option empfohlen. -
BusName=
Hier ist der D-Bus-Busname, unter dem dieser Dienst erreichbar ist, anzugeben. Die Option ist für Dienste vomType=dbus
verpflichtend. -
ExecStart=
Enthält Befehle mit ihren Argumenten, die ausgeführt werden, wenn diese Unit gestartet wird. Es muss genau ein Befehl angegeben werden, außer die OptionType=oneshot
ist gesetzt, dann kann ExecStart= mehrfach verwendet werden. Der Wert von ExecStart= muss den in der deutsche Manpage systemd.service detailliert beschriebenen Regeln entsprechen. -
ExecStop=
Kann mehrfach verwendet werden und enthält Befehle, die dem Stoppen eines mittels ExecStart= gestarteten Dienstes, dienen. Die Syntax ist identisch zu ExecStart=. -
ExecStartPre=
,ExecStartPost=
,ExecStopPost=
Zusätzliche Befehle, die vor bzw. nach dem Befehl inExecStart=
oderExecStop=
gestartet werden. Auch hier ist die Syntax identisch zu ExecStart=. Es sind mehrere Befehlszeilen erlaubt und die Befehle werden seriell einer nach dem anderen ausgeführt. Falls einer dieser Befehle (dem nicht "-" vorangestellt ist) fehlschlägt, wird die Unit sofort als fehlgeschlagen betrachtet. -
RestartSec=
Bestimmt die vor dem Neustart eines Dienstes zu schlafende Zeit. Eine einheitenfreie Ganzzahl definiert Sekunden, eine Angabe von "3min 4s" ist auch möglich.
Die Art der Zeitwertdefinition gilt für alle zeitgesteuerten Optionen. -
TimeoutStartSec=
,TimeoutStopSec=
,TimeoutSec=
Bestimmt die Zeit, die auf das Starten bzw. Stoppen gewartet werden soll. TimeoutSec= vereint die beiden zuvor genannten Optionen.
TimeoutStopSec= konfiguriert zusätzlich die Zeit, die, soweit vorhanden, für jedenExecStop=
-Befehl gewartet werden soll. -
Restart=
Konfiguriert, ob der Dienst neu gestartet werden soll, wenn der Diensteprozess sich beendet, getötet oder eine Zeitüberschreitung erreicht wird. Wenn der Tod des Prozesses das Ergebnis einer Systemd-Aktion ist, wird der Dienst nicht neu gestartet.
Die erlaubten Werte sind: no, always, on-success, on-failure, on-abnormal, on-abort oder on-watchdog.
Folgende Tabelle zeigt den Effekt der Restart= Einstellung auf die Exit-Gründe.
on on on on on
► Restart= ► always success failure abnormal abort watchdog ▼ Exit-Grund ▼ Sauberer Exit X X Unsauberer Exit X X Unsauberes Signal X X X X Zeitüberschreitung X X X Watchdog X X X X
Die bei Bedarf gesetzten Optionen
RestartPreventExitStatus=
undRestartForceExitStatus=
ändern dieses Verhalten.
Beispiele
Einige selbst erstellte Service-Units finden sich auf unseren Handbuchseiten
service-Unit für systemd Timer
service-Unit für systemd Path
und mit der bevorzugten Suchmaschine im Internet.
LinuxCommunity, Systemd-Units selbst erstellen
Deutsche Manpage, systemd.service
LinuxCommunity, Systemd-Units selbst erstellen