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.
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:
/tmp
- und Netzwerkzugriff zuweisen.
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.
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:
systemctl snapshot
erstellt. Ermöglicht die Wiederherstellung des aktuellen Systemzustands nach Änderungen. Die interne Struktur von Unit-Dateien ist mit Abschnitten organisiert. Abschnitte werden durch ein Paar eckiger Klammern „[]“ mit dem Abschnittsnamen darin gekennzeichnet.
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=
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:
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.
.wants
-Verzeichnis der angegebenen Ziel-Unit (z. B. /etc/systemd/system/multi-user.target.wants/
) erstellt. Zwischen den Abschnitten
[Unit] und [Install] finden sich typischerweise Abschnitte, die spezifisch für den Unit-Typ sind (z.B. [Service], [Socket], etc.).
Dieser Abschnitt enthält Konfigurationen, die nur für Dienste gelten.
ExecStart=
angegeben. systemd
verfolgt den Kindprozess. Jede Socket-Unit muss eine passende Service-Unit haben, die aktiviert wird, wenn der Socket eine Verbindung empfängt.
Ermöglicht die Verwaltung von Mountpunkten durch systemd. Mount-Units werden oft direkt aus /etc/fstab
-Dateien übersetzt.
Wird verwendet, um Aufgaben zu planen. Ersetzt oder ergänzt die Funktionalität von cron und at.
Vorlagen-Unit-Dateien ermöglichen die Erstellung mehrerer Instanzen von 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
Die Stärke von Vorlagen-Unit-Dateien liegt in ihrer Fähigkeit, Informationen dynamisch zu ersetzen. Dies geschieht durch die Verwendung von Variablen-Spezifizierern:
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.