Systemd Essentials: Arbeiten mit Services, Units und dem Journal

Einführung

In den letzten Jahren sind Linux-Distributionen zunehmend von anderen Init-Systemen auf "+ systemd " umgestiegen. Die Toolsuite " systemd +" bietet ein schnelles und flexibles Init-Modell für die Verwaltung einer gesamten Maschine ab dem Start.

In diesem Handbuch erhalten Sie einen kurzen Überblick über die wichtigsten Befehle, die Sie zum Verwalten eines Servers mit "+ systemd " benötigen. Diese sollten auf jedem Server funktionieren, der " systemd +" implementiert (alle Betriebssystemversionen ab Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Lass uns anfangen.

Grundlegende Einheitenverwaltung

Das grundlegende Objekt, das "+ systemd " verwaltet und bearbeitet, ist eine "Einheit". Einheiten können von vielen Typen sein, aber der gebräuchlichste Typ ist ein "Dienst" (angegeben durch eine Einheitendatei, die mit " .service " endet). Für die Verwaltung von Diensten auf einem mit " systemd " ausgestatteten Server ist unser Hauptwerkzeug der Befehl " systemctl +".

Alle normalen init-Systembefehle haben äquivalente Aktionen wie der Befehl + systemctl +. Wir werden die Unit "+ nginx.service" verwenden, um dies zu demonstrieren (Sie müssen Nginx mit Ihrem Paketmanager installieren, um diese Servicedatei zu erhalten).

Zum Beispiel können wir den Dienst starten, indem wir Folgendes eingeben:

sudo systemctl start nginx.service

Wir können es wieder stoppen, indem wir Folgendes eingeben:

sudo systemctl stop nginx.service

Um den Dienst neu zu starten, können wir Folgendes eingeben:

sudo systemctl restart nginx.service

Um zu versuchen, den Dienst neu zu laden, ohne die normale Funktionalität zu unterbrechen, können wir Folgendes eingeben:

sudo systemctl reload nginx.service

Einheiten aktivieren oder deaktivieren

Standardmäßig werden die meisten Unit-Dateien + systemd + beim Booten nicht automatisch gestartet. Um diese Funktionalität zu konfigurieren, müssen Sie die Einheit aktivieren. Dies bindet es an ein bestimmtes Boot- "Ziel", wodurch es ausgelöst wird, wenn dieses Ziel gestartet wird.

Geben Sie Folgendes ein, damit ein Dienst beim Start automatisch gestartet wird:

sudo systemctl enable nginx.service

Wenn Sie den Dienst wieder deaktivieren möchten, geben Sie Folgendes ein:

sudo systemctl disable nginx.service

Überblick über den Systemstatus

Es gibt viele Informationen, die wir von einem "+ systemd +" - Server abrufen können, um einen Überblick über den Systemstatus zu erhalten.

Um zum Beispiel alle Unit-Dateien zu erhalten, die "+ systemd " als "aktiv" aufgelistet hat, geben Sie Folgendes ein (Sie können " list-units " auch weglassen, da dies das Standardverhalten von " systemctl +" ist):

systemctl list-units

Fügen Sie den Schalter "+ - all " hinzu, um alle Einheiten aufzulisten, die " systemd +" geladen hat oder versucht hat, in den Speicher zu laden, einschließlich derer, die derzeit nicht aktiv sind:

systemctl list-units --all

Um alle auf dem System installierten Einheiten aufzulisten, einschließlich der Einheiten, die + systemd + nicht versucht hat, in den Speicher zu laden, geben Sie Folgendes ein:

systemctl list-unit-files

Anzeigen grundlegender Protokollinformationen

Eine "+ systemd " - Komponente mit dem Namen " journald +" sammelt und verwaltet Journaleinträge aus allen Teilen des Systems. Hierbei handelt es sich im Wesentlichen um Protokollinformationen von Anwendungen und dem Kernel.

Geben Sie Folgendes ein, um alle Protokolleinträge ab dem ältesten Eintrag anzuzeigen:

journalctl

Standardmäßig werden Ihnen Einträge aus dem aktuellen und vorherigen Start angezeigt, wenn "+ journald " so konfiguriert ist, dass vorherige Startdatensätze gespeichert werden. Einige Distributionen aktivieren dies standardmäßig, während andere dies nicht tun (um dies zu aktivieren, bearbeiten Sie entweder die Datei " /etc/systemd/journald.conf " und setzen Sie die Option " Storage = " auf "persistent" oder erstellen Sie die persistente Verzeichnis durch Eingabe von ` sudo mkdir -p / var / log / journal +`).

Wenn Sie nur die Journaleinträge vom aktuellen Start sehen möchten, fügen Sie das Flag + -b + hinzu:

journalctl -b

Um nur Kernelnachrichten anzuzeigen, wie sie normalerweise durch "+ dmesg " dargestellt werden, können Sie das Flag " -k +" verwenden:

journalctl -k

Sie können dies auch hier nur auf den aktuellen Start beschränken, indem Sie das Flag "+ -b +" anhängen:

journalctl -k -b

Abfragen von Einheitenzuständen und Protokollen

Mit den oben genannten Befehlen haben Sie Zugriff auf den allgemeinen Systemstatus. Sie können jedoch auch Informationen zum Status einzelner Einheiten abrufen.

Um eine Übersicht über den aktuellen Status einer Einheit zu erhalten, können Sie die Option "+ status " mit dem Befehl " systemctl +" verwenden. Hier sehen Sie, ob das Gerät aktiv ist, Informationen zum Vorgang und die neuesten Journaleinträge:

systemctl status nginx.service

Um alle Journaleinträge für die betreffende Einheit anzuzeigen, geben Sie dem Befehl "+ journalctl " die Option " -u +" mit dem Einheitennamen:

journalctl -u nginx.service

Wie immer können Sie die Einträge auf den aktuellen Start beschränken, indem Sie das Flag + -b + hinzufügen:

journalctl -b -u nginx.service

Überprüfen von Einheiten und Einheitendateien

Inzwischen wissen Sie, wie Sie den Status einer Einheit durch Starten oder Stoppen ändern und wie Sie Status- und Journalinformationen anzeigen, um einen Eindruck davon zu bekommen, was mit dem Prozess geschieht. Es ist jedoch noch nicht bekannt, wie andere Aspekte von Einheiten und Einheitendateien überprüft werden können.

Eine Unit-Datei enthält die Parameter, die + systemd + zum Verwalten und Ausführen einer Unit verwendet. Geben Sie Folgendes ein, um den vollständigen Inhalt einer Unit-Datei anzuzeigen:

systemctl cat nginx.service

Um den Abhängigkeitsbaum einer Unit zu sehen (welche Units + systemd + versuchen, beim Starten der Unit zu aktivieren), geben Sie Folgendes ein:

systemctl list-dependencies nginx.service

Dies zeigt die abhängigen Einheiten an, wobei "+ target " Einheiten rekursiv erweitert werden. Um alle abhängigen Einheiten rekursiv zu erweitern, übergeben Sie das Flag ` - all +`:

systemctl list-dependencies --all nginx.service

Um die allgemeinen Details der Geräteeinstellungen im System anzuzeigen, können Sie die Option "+ show +" verwenden:

systemctl show nginx.service

Dies gibt Ihnen den Wert jedes Parameters, der von + systemd + verwaltet wird.

Unit-Dateien ändern

Wenn Sie eine Unit-Datei ändern müssen, können Sie mit "+ systemd " Änderungen am Befehl " systemctl +" selbst vornehmen, damit Sie nicht zum tatsächlichen Speicherort der Festplatte wechseln müssen.

Um ein Unit-Datei-Snippet hinzuzufügen, mit dem Einstellungen in der Standard-Unit-Datei angehängt oder überschrieben werden können, rufen Sie einfach die Option "+ edit +" auf der Unit auf:

sudo systemctl edit nginx.service

Wenn Sie den gesamten Inhalt der Unit-Datei ändern möchten, anstatt ein Snippet zu erstellen, übergeben Sie das Flag "+ - full +":

sudo systemctl edit --full nginx.service

Nach dem Ändern einer Unit-Datei sollten Sie den Prozess + systemd + selbst neu laden, um Ihre Änderungen zu übernehmen:

sudo systemctl daemon-reload

Verwenden von Zielen (Runlevel)

Eine weitere Funktion eines Init-Systems besteht darin, den Server selbst zwischen verschiedenen Zuständen zu wechseln. Herkömmliche Init-Systeme bezeichnen diese normalerweise als "Runlevel", sodass sich das System immer nur in einem Runlevel befindet.

In + systemd + werden stattdessen "Ziele" verwendet. Ziele sind im Wesentlichen Synchronisierungspunkte, mit denen der Server den Server in einen bestimmten Zustand versetzen kann. Service- und andere Gerätedateien können an ein Ziel gebunden werden, und mehrere Ziele können gleichzeitig aktiv sein.

Geben Sie Folgendes ein, um alle auf Ihrem System verfügbaren Ziele anzuzeigen:

systemctl list-unit-files --type=target

Um das Standardziel anzuzeigen, das + systemd + beim Booten zu erreichen versucht (wodurch wiederum alle Unit-Dateien gestartet werden, aus denen der Abhängigkeitsbaum dieses Ziels besteht), geben Sie Folgendes ein:

systemctl get-default

Sie können das Standardziel, das beim Booten verwendet wird, mit der Option + set-default + ändern:

sudo systemctl set-default multi-user.target

Um zu sehen, welche Einheiten an ein Ziel gebunden sind, können Sie Folgendes eingeben:

systemctl list-dependencies multi-user.target

Mit der Option "+ isolate +" können Sie den Systemstatus so ändern, dass er zwischen Zielen wechselt. Dies stoppt alle Einheiten, die nicht an das angegebene Ziel gebunden sind. Stellen Sie sicher, dass das Ziel, das Sie isolieren, keine wesentlichen Dienste stoppt:

sudo systemctl isolate multi-user.target

Stoppen oder Neustarten des Servers

Für einige der Hauptzustände, zu denen ein System übergehen kann, sind Verknüpfungen verfügbar. Zum Ausschalten Ihres Servers können Sie beispielsweise Folgendes eingeben:

sudo systemctl poweroff

Wenn Sie stattdessen das System neu starten möchten, können Sie Folgendes eingeben:

sudo systemctl reboot

Sie können in den Rettungsmodus starten, indem Sie Folgendes eingeben:

sudo systemctl rescue

Beachten Sie, dass die meisten Betriebssysteme herkömmliche Aliase für diese Vorgänge enthalten, sodass Sie einfach "+ sudo poweroff " oder " sudo reboot " ohne das " systemctl +" eingeben können. Es ist jedoch nicht garantiert, dass dies auf allen Systemen eingerichtet ist.

Nächste Schritte

Inzwischen sollten Sie die Grundlagen zur Verwaltung eines Servers kennen, der "+ systemd +" verwendet. Es gibt jedoch noch viel mehr zu lernen, wenn sich Ihre Anforderungen erweitern. Unten finden Sie Links zu Handbüchern mit detaillierteren Informationen zu einigen der in diesem Handbuch behandelten Komponenten:

Indem Sie lernen, wie Sie die Stärken Ihres init-Systems nutzen können, können Sie den Zustand Ihrer Maschinen steuern und Ihre Dienste und Prozesse einfacher verwalten.