Inhaltsverzeichnis

Systemd-Units und Unit-Dateien verstehen

Einleitung

Zunehmend übernehmen Linux-Distributionen das

systemd Init-System. Diese leistungsstarke Softwaresuite kann viele Aspekte Ihres Servers verwalten, von Diensten über gemountete Geräte bis hin zu Systemzuständen.

In systemd bezieht sich eine

Unit auf jede Ressource, die das System zu bedienen und zu verwalten weiß. Dies ist das primäre Objekt, mit dem die systemd-Tools umgehen können. Diese Ressourcen werden mithilfe von Konfigurationsdateien, den sogenannten Unit-Dateien, definiert.

In diesem Leitfaden stellen wir Ihnen die verschiedenen Units vor, die systemd verwalten kann. Wir werden auch einige der vielen Direktiven behandeln, die in Unit-Dateien verwendet werden können, um die Art und Weise zu gestalten, wie diese Ressourcen auf Ihrem System gehandhabt werden.

Was bieten Ihnen Systemd-Units?

Units sind die Objekte, die systemd verwalten kann. Sie sind im Grunde eine standardisierte Darstellung von Systemressourcen, die von der Suite von Daemons verwaltet und von den bereitgestellten Dienstprogrammen manipuliert werden können. Man kann sagen, dass Units Diensten oder Jobs in anderen Init-Systemen ähneln. Eine Unit hat jedoch eine viel breitere Definition, da sie zur Abstraktion von Diensten, Netzwerkressourcen, Geräten, Dateisystem-Mounts und isolierten Ressourcenpools verwendet werden kann.

Einige der Funktionen, die Units einfach implementieren können, sind:

Wo befinden sich Systemd-Unit-Dateien?

Die Dateien, die definieren, wie systemd eine Unit behandeln wird, können an vielen verschiedenen Orten gefunden werden, von denen jeder unterschiedliche Prioritäten und Auswirkungen hat.

/lib/systemd/system: Die Systemkopie der Unit-Dateien wird im Allgemeinen in diesem Verzeichnis aufbewahrt. Wenn Software Unit-Dateien auf dem System installiert, ist dies der Ort, an dem sie standardmäßig platziert werden. Sie sollten die Dateien in diesem Verzeichnis

nicht bearbeiten.

/etc/systemd/system: Wenn Sie die Funktionsweise einer Unit ändern möchten, ist dies der beste Ort dafür. Unit-Dateien, die sich in diesem Verzeichnis befinden, haben Vorrang vor allen anderen Speicherorten auf dem Dateisystem.

/etc/systemd/system/unit.name.d/: Wenn Sie nur bestimmte Direktiven aus der System-Unit-Datei überschreiben möchten, können Sie Snippets in einem Unterverzeichnis bereitstellen. Für eine Unit namens

example.service

könnte ein Unterverzeichnis namens example.service.d erstellt werden. Innerhalb dieses Verzeichnisses kann eine Datei, die auf

.conf

endet, verwendet werden, um Attribute zu überschreiben oder zu erweitern.

/run/systemd/system: Es gibt auch einen Ort für Laufzeit-Unit-Definitionen. Dateien in diesem Verzeichnis haben eine Priorität zwischen denen in /etc/systemd/system und /lib/systemd/system. Der systemd-Prozess selbst verwendet diesen Ort für dynamisch zur Laufzeit erstellte Unit-Dateien. Alle in diesem Verzeichnis vorgenommenen Änderungen gehen bei einem Neustart des Servers verloren.

Arten von Units

Systemd kategorisiert Units nach dem Typ der Ressource, die sie beschreiben. Der einfachste Weg, den Typ einer Unit zu bestimmen, ist ihr Typ-Suffix. Die folgende Liste beschreibt die verfügbaren Unit-Typen:

Anatomie einer Unit-Datei

Die interne Struktur von Unit-Dateien ist mit Abschnitten organisiert. Abschnitte werden durch ein Paar eckiger Klammern „[]“ mit dem Abschnittsnamen darin gekennzeichnet.

Allgemeine Merkmale von Unit-Dateien

Abschnittsnamen sind wohldefiniert und Groß-/Kleinschreibung-sensitiv. Innerhalb dieser Abschnitte wird das Verhalten und die Metadaten der Unit durch einfache Direktiven im Schlüssel-Wert-Format definiert, wobei die Zuweisung durch ein Gleichheitszeichen erfolgt:

[Section]
Directive1=value
Directive2=value

Um eine Direktive in einer Überschreibungsdatei zurückzusetzen, wird ihr ein leerer String zugewiesen:

Directive1=

Anweisungen im Abschnitt [Unit]

Der erste Abschnitt in den meisten Unit-Dateien ist der Abschnitt [Unit]. Er wird im Allgemeinen zur Definition von Metadaten und zur Konfiguration der Beziehung der Unit zu anderen Units verwendet.

Häufige Direktiven sind:

Anweisungen im Abschnitt [Install]

Dieser optionale Abschnitt definiert das Verhalten einer Unit, wenn sie aktiviert (

enabled) oder deaktiviert (disabled) wird. Das Aktivieren einer Unit markiert sie für den automatischen Start beim Hochfahren.

Unit-spezifische Abschnittsanweisungen

Zwischen den Abschnitten

[Unit] und [Install] finden sich typischerweise Abschnitte, die spezifisch für den Unit-Typ sind (z.B. [Service], [Socket], etc.).

Der Abschnitt [Service]

Dieser Abschnitt enthält Konfigurationen, die nur für Dienste gelten.

Der Abschnitt [Socket]

Jede Socket-Unit muss eine passende Service-Unit haben, die aktiviert wird, wenn der Socket eine Verbindung empfängt.

Der Abschnitt [Mount]

Ermöglicht die Verwaltung von Mountpunkten durch systemd. Mount-Units werden oft direkt aus /etc/fstab-Dateien übersetzt.

Der Abschnitt [Timer]

Wird verwendet, um Aufgaben zu planen. Ersetzt oder ergänzt die Funktionalität von cron und at.

Erstellen von Instanz-Units aus Vorlagen-Unit-Dateien

Vorlagen-Unit-Dateien ermöglichen die Erstellung mehrerer Instanzen von Units.

Namen von Vorlagen- und Instanz-Units

Vorlagen-Unit-Dateien sind daran zu erkennen, dass sie ein

@-Symbol nach dem Basis-Unit-Namen und vor dem Unit-Typ-Suffix enthalten.

example@.service

Wenn eine Instanz aus einer Vorlage erstellt wird, wird ein Instanzbezeichner zwischen das

@-Symbol und den Punkt gesetzt.

example@instance1.service

Vorlagen-Spezifizierer

Die Stärke von Vorlagen-Unit-Dateien liegt in ihrer Fähigkeit, Informationen dynamisch zu ersetzen. Dies geschieht durch die Verwendung von Variablen-Spezifizierern:

Fazit

Wenn Sie mit systemd arbeiten, kann das Verständnis von Units und Unit-Dateien die Verwaltung erleichtern. Im Gegensatz zu vielen anderen Init-Systemen müssen Sie keine Skriptsprache kennen, um die zum Starten von Diensten oder des Systems verwendeten Init-Dateien zu interpretieren. Die Unit-Dateien verwenden eine recht einfache, deklarative Syntax, die es Ihnen ermöglicht, auf einen Blick den Zweck und die Auswirkungen einer Unit bei der Aktivierung zu erkennen.