Systemd/Eigener Service
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 von eigenen Service-Units, sowie verweise auf weitere Manpages zum erstellen von anderen 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
.