orm@doc-tcpip.org

Erstellt: Januar 2016 - Letzte Modifikation: Februar 2020

[ Main | Local ]


Systemd Units and Unit-Files


Eine Unit ist jegliche Art von Resource, die Systemd verwalten kann: Services, Netzwerk-Resourcen, Devices, Mounts ... Das Unit-File beschreibt, wie genau das gemacht werden soll.

Unit-Files werden in der Regel nach /lib/systemd/system kopiert. Diese werden nicht modifiziert. Änderungen legt man in /etc/systemd/system an. Dort gespeicherte Files haben Priorität über die System Unit-Files. Falls in /lib/systemd/system kein File existiert, so wird dort ein Link erzeugt.

Weiterhin kann man einzelne Setzungen überspielen oder Ergänzungen hinzufügen. Dazu legt man im Verzeichnis /etc/systemd/system ein neues Verzeichnis an, welches wie das Unit-File heisst - allerdings mit einem .d am Ende (für die Unit gpsd.service wäre das zB. gpsd.service.d). In diesem Verzeichnis erzeugt man ein .conf File (der Name ist unerheblich, aber die Endung ist wichtig). In diese File werden alle Änderungen und Ergänzungen eingetragen (ein sogenanntes Snippet).

Der Systemd legt ausserdem noch Unit-Files in /run/systemd/system für die Dauer der Session an.

Welche Typen von Units gibt es?

Der Typ einer Unit wird durch den zweiten Teil des Namens des Unit-Files angezeigt. Die wichtigsten Typen sind folgende:

Es gibt noch eine Reihe weiterer Typen:

Zum Schluss gibt es noch .slice und .scope. Damit können Resourcen Control Groups zugeordnet werden sowie externe Processe über den Systemd verwaltet werden.

Wie ein Unit-File aufgebaut ist

Das File besteht aus einer Reihe Sektionen mit definierten Namen. Diese werden in eckigen Klammern geschrieben. Danach folgen aller Parameter der Sektion als Key-Value Paare.

Häufig braucht man folgende Sektionen:

Die "Unit" Sektion ist immer da, "Install" nur dann, wenn man die Unit auch "enablen" können muss. Die "Install" Unit steht dabei immer als letzte Definition. Dazwischen werden dann die spezifischen Sektionen eingetragen.

Folgende Units haben keine spezifische Sektion: "target", "snapshot", "device", "scope".

Die [Unit] Sektion

Es gibt eine Reihe Parameter für die meisten Sektionen. Hier wird eine rein subjective Auswahl der häufigsten Parameter gegeben.

Die [Install] Sektion

Units mit dieser Sektion werden automatisch gestartet.

Die [Service] Sektion

Spezifiziert das Verhalten des Service, also welche Prozesse laufen sollen und wie diese abzufragen sind. Wichtig ist der Typ des Service, dessen Parameter Type daher eine Reihe Werte hat:

Neben der Art des Services muss noch definiert werden, wie dieser behandelt werden soll:

Die [Socket] Sektion

Ein Socket hat immer einen passenden Service, der in dem Moment aktiv wird, wenn der Socket angesprochen wird. Für einen Service ist es vorteilhaft, über einen Socket zu kommunizieren, da so Multiplexing gut möglich ist.

Die [Mount] Sektion

Mit Mount Units kann Systemd auch Mount-Points verwalten. Der Name der Unit ist dabei vom Pfad abgeleitet, bei dem alle Schrägstriche durch Bindestriche ersetzt sind.

Die [Automount] Sektion

Diese Sektion erscheint nur zusammen mit einer Mount-Sektion, falls ein Mount automatisch erfolgen soll.

Die [Timer] Sektion

Man kann einer Unit eine Timer Unit zuordnen, was eine Funktionalität wie die von Cron bringt.

Die [Path] Sektion

Funktioniert ähnlich wie ein Socket. Man teilt dem Systed einen Pfad mit, der überwacht wird. Auch hier muss es eine Unit geben, die dann aktiviert wird.

Weitere Sektionen

Es gibt noch eine eigene Sektion für einen Swap-Bereich, sowie eine Sektion, mit der man "Slices" definieren kann, um seine vom Systemd verwalteten Resourcen weiter zu gruppieren.

Units aus einem Template generieren

Man kann ein Template vorgeben, indem alle Werte der Parameter durch Variablen ersetzt sind. So ist es möglich, dynamisch Units zu erzeugen und anzustarten.

Ein solches Template für ein Unit-File hat vor dem Suffix ein "@" Symbol im namen, also unit@.unit-type.

Von einem Template kann man dann beliebige Instanzen starten. Das Template wird dabei verlinkt, und die Parameter passend ersetzt. Eine numerische ID wird zwischen dem "@" und dem Punkt eingefügt.


[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2020 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )