Service Units
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Dieser Artikel ist mit keiner aktuell unterstützten Ubuntu-Version getestet! Bitte teste diesen Artikel für eine Ubuntu-Version, welche aktuell unterstützt wird. Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
Einleitung¶
Dieser Artikel befasst sich mit Systemd Service Units. Diese dienen dazu, Dienste zu starten und zu stoppen - und entsprechen damit den Init-Skripten von SysVinit bzw. Upstart. Zur Steuerung dient der systemd-eigene Befehl systemd/systemctl.
Wer eigene Service Units anlegen (oder bestehende Service Units editieren) möchte, sollte sich zunächst mit dem allgemeinen Aufbau der systemd/Units vertraut machen.
Eine minimale allgemeine Service-Unit sieht wie folgt aus:
[Unit] # Abschnitt wird im Artikel systemd/Units beschrieben [Service] Type=simple ExecStart=/PFAD/ZUM/BEFEHL/befehl [Install] # Abschnitt wird im Artikel systemd/Units beschrieben
Der Schlüssel ExecStart
enthält den Befehl zum Starten des Dienstes. Wichtig ist, dass immer der volle Pfad zum Befehl angegeben wird. In diesem Abschnitt kann z.B. auch eingetragen werden, welche Befehle vor oder nach dem Start des eigentlichen Services ausgeführt werden sollen, unter welchem Benutzer und welcher Gruppe der Dienst läuft (Standard: root). Außerdem wird hier festgelegt, welchen Typ der Service haben soll. Das Type=simple
im obigen Beispiel müsste nicht explizit angegeben werden, da dies der Vorgabewert ist.
Optionen für die [Service]-Sektion¶
Es können unter anderem folgende Schlüssel eingefügt werden:
Schlüssel | Erklärung |
ExecStart | der Befehl, der beim Start der Unit ausgeführt wird |
ExecStartPre | der Befehl, der vor dem Start der Unit (also vor der Ausführung von ExecStart ) ausgeführt werden soll |
ExecStartPost | der Befehl, der nach dem Start der Unit (also nach der Ausführung von ExecStart ) ausgeführt werden soll |
WorkingDirectory | legt das Arbeitsverzeichnis fest, in dem die Prozesse ausgeführt werden. Das Verzeichnis muss als absoluter Pfad angegeben werden oder als ~ . Bei letzterem wird das Homeverzeichnis des im Schlüssel User angegebenen Nutzers gewählt. |
User | legt fest, unter welchem Benutzer der Service laufen soll (Standard: root) |
Group | legt fest, unter welcher Gruppe der Service laufen soll |
Die Schlüssel ExecStarPre
und ExecStartPost
dürfen auch mehrmals mit verschiedenen Befehlen vorkommen. Wichtig ist, dass bei den Werten für die Exec*
Schlüssel immer der vollständige Pfad zum Programm/Skript mit angegeben wird, also z.B. ExecStart=/user/local/bin/mein_programm
Wie bei allen Units ist zu beachten, dass die Schlüssel immer mit Großbuchstaben beginnen und in CamelCase-Schreibweise geschrieben werden: ExecStart=...
Service Typen¶
Wie oben erwähnt gibt es verschiedene Typen für einen Service. simple
ist der Standardwert und die richtige Wahl für Dienste, welche permanent laufen, aber nicht "forken".
"Forkt" ein Service, d.h. erzeugt ein Dienst weiter Prozesse (wie es z.B. einige Webserver tun), dann muss der Service-Typ auf forking
gesetzt werden.
Soll ein Service nur einmal laufen (z.B. ein "Aufräumskript", welche eine bestimmte Aufgabe erfüllt und dann beendet ist), dann wählt man als Service-Typ oneshot
.
Eine vollständige Übersicht auch weiterer Typen inklusive Erklärungen ist in der systemd Dokumentation 🇬🇧 zu finden.
systemd kennt noch eine Vielzahl weiterer Schlüssel für diesen Abschnitt. Eine ausführliche Auflistung und Erklärung ist in der Dokumentation für Service 🇬🇧 als auch in der Dokumentation systemd.exec 🇬🇧 zu finden.
Selbst angelegte Service Units aktivieren¶
Hat man eine eigene Service Unit angelegt, muss man diese noch aktivieren. Dies geschieht über den Befehl systemctl mit Root-Rechten[1][2]. Die Angabe der Dateiendung .services
ist optional und kann weg gelassen werden.
sudo systemctl enable NAME_DER_UNIT_DATEI
Zum Deaktivieren dient der Befehl:
sudo systemctl disable NAME_DER_UNIT_DATEI
Um zu prüfen, ob eine Service Unit aktiv ist, führt man folgenden Befehl aus:
sudo systemctl is-enabled NAME_DER_UNIT_DATEI
sudo systemctl edit SERVICEUNIT
Links¶
intern¶
systemd - Einführung in systemd
systemd/Units - Einführung in systemd_Units
systemd/systemctl - Steuern von Units
Howto/systemd Service Unit Beispiel - Howto, in dem eine funktionierende Service-Datei für einen einfachen Server erstellt und erklärt wird
systemd-analyze - den Startvorgang des Systems und der Units analysieren und ggf. optimieren
extern¶
Systemd/Eigener_Service 🇩🇪 Artikel im ArchLinux-Wiki zu systemd Services
Dokumentation 🇬🇧 zu systemd Services
systemd Wiki 🇬🇧 - Dokumentation