Systemd/Eigener Service

Aus wiki.archlinux.de

Eigene Services werden in /etc/systemd/system abgelegt, und sind einfache INI-Dateien, in denen die Anweisungen für systemd stehen. Dieses generiert aus der Datei eine Service-Unit, die mittels systemctl verwaltet werden kann, und deren Verhalten von journald geloggt und über journalctl eingesehen werden kann.

[Unit]
Description=OpenSSH Daemon
Wants=sshdgenkeys.service
After=sshdgenkeys.service
After=network.target

[Service]
ExecStart=/usr/bin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=always

[Install]
WantedBy=multi-user.target

Die Service-Datei für den SSH-Daemon (eigentlich „Service“) beinhaltet drei Abschnitte. Zuerst werden Informationen für die Service-Unit verzeichnet. Darunter die Beschreibung, und welche anderen Units von dem Service benötigt werden, und wann der Service in Abhängigkeit zu anderen Units gestartet werden soll. Darunter befindet sich in diesem Fall die eine Target-Unit, nämlich die für das Netzwerk, das heißt, die Service-Unit für SSH startet erst dann den SSH-Service, wenn die Target-Unit für das Netzwerk gestartet wurde, und verlangt dann wiederum die Service-Unit sshdgenkeys, nach derer sie den SSH-Service erst startet.

Der Service selbst besteht im Abschnitt [Service] aus mehreren Befehlen, die auch mehrfach vorkommen können. Hier werden die eigentlichen Programme des Services, sowie sein Verhalten definiert. Zudem gibt es hier noch einen Abschnitt [Install], der Installationsinformationen für die Unit bereithält. Dieser Abschnitt ist nicht verpflichtend. Es müssen lediglich [Unit] und gemäß der Logik [Service] enthalten sein.

Die Manpages systemd.unit und systemd.service beinhalten ausführliche Informationen zum Erstellen eigener Service-Units, sowie Verweise auf weitere Manpages zum Erstellen anderer Units.

Variablen

Service-Dateien können Variablen enthalten. Einige wichtige Variablen zeigt die folgende Tabelle auf.

Variable Inhalt Info
%n Name Zugriff auf den vollständigen Unit-Namen
%i Instanzname Units, die ein @ im Dateinamen haben, können mittels systemctl start name@wert gestartet werden, hiermit kann auf wert zugegriffen werden.
%u Benutzername Zugriff auf den Namen des für diese Unit konfigurierten Useraccounts, oder – wenn nicht gesetzt – den Useraccountnamen des Users, unter dem systemd läuft.
%b Boot-ID Die weiter oben beschriebene Boot-ID kann ebenfalls in Unit-Definitionen verwendet werden.

Eine ausführliche Liste aller Variablen, sowie eine ausführliche Beschreibung eben dieser beinhaltet die Manpage systemd.unit.