[[Vorlage(Getestet, bionic, focal)]] {{{#!vorlage Wissen [:mit Root-Rechten arbeiten:] [:Terminal: Ein Terminal öffnen] [:Editor: Einen Editor öffnen] [:systemd/Units: Systemd_Units] }}} [[Inhaltsverzeichnis()]] Dieser Artikel befasst sich mit [:systemd:] Service Units. Diese dienen dazu, [:Dienste:] zu starten und zu stoppen. Zur Steuerung dient der systemd-eigene Befehl [:systemd/systemctl: 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. Ein praktisches und funktionierendes Beispiel für eine komplette Service Units befindet sich im [:Howto/systemd_Service_Unit_Beispiel:]. Allgemein sieht eine minimale Service-Unit wie folgt aus: {{{#!code ini [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: {{{#!vorlage tabelle 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 [wikipedia:Binnenmajuskel: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 [https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type= systemd Dokumentation] {en} zu finden. systemd kennt noch eine Vielzahl weiterer Schlüssel für diesen Abschnitt. Eine ausführliche Auflistung und Erklärung ist in der [https://www.freedesktop.org/software/systemd/man/systemd.service.html#Options Dokumentation für Service] {en} als auch in der Dokumentation [https://www.freedesktop.org/software/systemd/man/systemd.exec.html systemd.exec] {en} zu finden. = Links = == intern == * [:systemd:] - Einführung in systemd * [:systemd/Units:] - Einführung in systemd_Units, inkl. Beispielen zum Anlegen und Aktivieren von 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/systemd-analyze:systemd-analyze] - den Startvorgang des Systems und der Units analysieren und ggf. optimieren == extern == * [https://wiki.archlinux.de/title/Systemd/Eigener_Service Systemd/Eigener_Service] {de} Artikel im ArchLinux-Wiki zu systemd Services * [https://www.freedesktop.org/software/systemd/man/systemd.service.html Dokumentation] {en} zu systemd Services * [https://www.freedesktop.org/wiki/Software/systemd/ systemd Wiki] {en} - Dokumentation * [askubuntu:659267/how-do-i-override-or-configure-systemd-services:How do I override or configure systemd services?] {en} #tag: System, systemd, Dienste