Einführung
In den letzten Jahren sind Linux-Distributionen zunehmend von anderen Init-Systemen auf systemd
umgestiegen. Das systemd
-Paket bietet ein schnelles und flexibles Initialisierungsmodell zur Verwaltung einer gesamten Maschine vom Bootvorgang an.
In diesem Leitfaden geben wir Ihnen einen schnellen Überblick über die wichtigsten Befehle, die Sie zur Verwaltung eines systemd
-aktivierten Servers kennen sollten. Diese sollten auf jedem Server funktionieren, der systemd
implementiert (jede Betriebssystemversion ab Ubuntu 15.04, Debian 8, CentOS 7, Fedora 15). Los geht’s.
Grundlegende Einheitenverwaltung
Das grundlegende Objekt, das systemd
verwaltet und auf das es reagiert, ist eine „Einheit“. Einheiten können viele Typen haben, aber der häufigste Typ ist ein „Service“ (angezeigt durch eine Einheitsdateiendung .service
). Um Dienste auf einem systemd
-aktivierten Server zu verwalten, ist unser wichtigstes Werkzeug der Befehl systemctl
.
All die normalen Init-Systembefehle haben äquivalente Aktionen mit dem Befehl systemctl
. Wir werden die Einheit 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 eingeben:
Wir können es erneut stoppen, indem wir Folgendes eingeben:
Um den Dienst neu zu starten, können wir Folgendes eingeben:
Um zu versuchen, den Dienst neu zu laden, ohne die normale Funktionalität zu unterbrechen, können wir Folgendes eingeben:
Aktivieren oder Deaktivieren von Einheiten
Standardmäßig werden die meisten systemd
-Einheitsdateien nicht automatisch beim Booten gestartet. Um diese Funktionalität zu konfigurieren, müssen Sie die Einheit „aktivieren“. Dies verknüpft sie mit einem bestimmten Boot-„Ziel“, sodass sie ausgelöst wird, wenn dieses Ziel gestartet wird.
Um einen Dienst automatisch beim Booten zu starten, geben Sie Folgendes ein:
Wenn Sie den Dienst wieder deaktivieren möchten, geben Sie Folgendes ein:
Eine Übersicht über den Systemzustand erhalten
Es gibt viele Informationen, die wir von einem systemd
-Server abrufen können, um einen Überblick über den Systemzustand zu erhalten.
Zum Beispiel, um alle Einheitsdateien zu erhalten, die von systemd
als „aktiv“ aufgelistet sind, geben Sie Folgendes ein (Sie können tatsächlich list-units
weglassen, da dies das Standardverhalten von systemctl
ist):
Um alle Einheiten aufzulisten, die systemd
geladen oder versucht hat, in den Speicher zu laden, einschließlich derer, die derzeit nicht aktiv sind, fügen Sie den Schalter --all
hinzu:
Um alle auf dem System installierten Einheiten aufzulisten, einschließlich derer, die systemd
nicht versucht hat, in den Speicher zu laden, geben Sie ein:
Anzeigen grundlegender Protokollinformationen
A systemd
component called journald
collects and manages journal entries from all parts of the system. This is basically log information from applications and the kernel.
Um alle Protokolleinträge zu sehen, beginnend mit dem ältesten Eintrag, geben Sie ein:
Standardmäßig werden Ihnen Einträge von der aktuellen und vorherigen Bootvorgängen angezeigt, wenn journald
so konfiguriert ist, dass vorherige Bootaufzeichnungen 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 das persistente Verzeichnis, indem Sie sudo mkdir -p /var/log/journal
eingeben).
Wenn Sie nur die Protokolleinträge vom aktuellen Boot sehen möchten, fügen Sie die Flagge -b
hinzu:
Um nur Kernelmeldungen zu sehen, wie sie typischerweise durch dmesg
dargestellt werden, können Sie die Flagge -k
verwenden:
Auch hier können Sie dies nur auf das aktuelle Boot beschränken, indem Sie die Flagge -b
anhängen:
Abrufen von Einheitszuständen und Protokollen
Während die obigen Befehle Ihnen Zugriff auf den allgemeinen Systemzustand gaben, können Sie auch Informationen zum Zustand einzelner Einheiten abrufen.
Um einen Überblick über den aktuellen Zustand einer Einheit zu erhalten, können Sie die Option status
mit dem Befehl systemctl
verwenden. Dies zeigt Ihnen, ob die Einheit aktiv ist, Informationen zum Prozess und die neuesten Journal Einträge:
Um alle Journal Einträge für die betreffende Einheit zu sehen, geben Sie die Option -u
mit dem Einheitsnamen an den Befehl journalctl
an:
Wie immer können Sie die Einträge auf den aktuellen Start durch Hinzufügen der Flagge -b
begrenzen:
Inspektion von Einheiten und Einheitsdateien
Bis jetzt wissen Sie, wie Sie den Zustand einer Einheit durch Starten oder Stoppen ändern können, und Sie wissen, wie Sie Zustands- und Journalinformationen anzeigen können, um eine Vorstellung davon zu bekommen, was mit dem Prozess passiert. Wir haben jedoch noch nicht gesehen, wie andere Aspekte von Einheiten und Einheitsdateien inspiziert werden können.
A unit file contains the parameters that systemd
uses to manage and run a unit. To see the full contents of a unit file, type:
Um den Abhängigkeitsbaum einer Einheit zu sehen (welche Einheiten systemd
aktivieren wird, wenn die Einheit gestartet wird), geben Sie ein:
Dies zeigt die abhängigen Einheiten mit rekursiv erweiterten target
-Einheiten an. Um alle abhängigen Einheiten rekursiv zu erweitern, übergeben Sie das --all
-Flag:
Zum Anzeigen der Details der Einheiteneinstellungen auf dem System verwenden Sie die show
-Option:
Dies gibt Ihnen den Wert jedes Parameters zurück, der von systemd
verwaltet wird.
Ändern von Einheitsdateien
Wenn Sie eine Änderung an einer Einheitsdatei vornehmen müssen, ermöglicht Ihnen systemd
, Änderungen direkt über den systemctl
-Befehl vorzunehmen, sodass Sie nicht den tatsächlichen Dateispeicherort aufrufen müssen.
Um einen Einheitsdatei-Schnipsel hinzuzufügen, der zum Anhängen oder Überschreiben von Einstellungen in der Standard-Einheitsdatei verwendet werden kann, rufen Sie einfach die edit
-Option für die Einheit auf:
Wenn Sie die gesamten Inhalte der Einheitsdatei anstelle eines Schnipsels ändern möchten, übergeben Sie das --full
-Flag:
Nachdem Sie eine Einheitsdatei geändert haben, sollten Sie den systemd
-Prozess selbst neu laden, um Ihre Änderungen zu übernehmen:
Verwenden von Zielen (Ausführungsstufen)
Eine weitere Funktion eines Init-Systems besteht darin, den Server selbst zwischen verschiedenen Zuständen zu überführen. Traditionelle Init-Systeme bezeichnen diese in der Regel als „Runlevels“, was es dem System ermöglicht, sich zu jedem Zeitpunkt nur in einem Runlevel zu befinden.
In systemd
werden stattdessen „Ziele“ verwendet. Ziele sind im Grunde Synchronisationspunkte, die der Server verwenden kann, um den Server in einen bestimmten Zustand zu versetzen. Service- und andere Unit-Dateien können an ein Ziel gebunden sein, und mehrere Ziele können gleichzeitig aktiv sein.
Um alle Ziele anzuzeigen, die auf Ihrem System verfügbar sind, geben Sie ein:
Um das Standardziel anzuzeigen, das systemd
beim Booten erreichen möchte (was wiederum alle Unit-Dateien startet, die den Abhängigkeitsbaum dieses Ziels ausmachen), geben Sie ein:
Sie können das Standardziel, das beim Booten verwendet wird, ändern, indem Sie die Option set-default
verwenden:
Um zu sehen, welche Einheiten an ein Ziel gebunden sind, können Sie eingeben:
Sie können den Systemzustand ändern, um zwischen Zielen zu wechseln, indem Sie die Option isolate
verwenden. Dadurch werden alle Einheiten gestoppt, die nicht an das angegebene Ziel gebunden sind. Stellen Sie sicher, dass das Ziel, das Sie isolieren, keine wesentlichen Dienste stoppt:
Server stoppen oder neu starten
Für einige der Hauptzustände, in die ein System übergehen kann, stehen Abkürzungen zur Verfügung. Beispielsweise können Sie zum Ausschalten Ihres Servers eingeben:
Wenn Sie das System stattdessen neu starten möchten, können Sie dies durch Eingabe erreichen:
Sie können in den Rettungsmodus booten, indem Sie Folgendes eingeben:
Beachten Sie, dass die meisten Betriebssysteme traditionelle Aliasnamen für diese Operationen enthalten, sodass Sie einfach sudo poweroff
oder sudo reboot
ohne systemctl
eingeben können. Dies ist jedoch nicht auf allen Systemen garantiert eingerichtet.
Nächste Schritte
Jetzt sollten Sie die Grundlagen kennen, wie man einen Server verwaltet, der systemd
verwendet. Es gibt jedoch noch viel mehr zu lernen, wenn Ihre Anforderungen wachsen. Unten finden Sie Links zu Anleitungen mit weiterführenden Informationen zu einigen der von uns behandelten Komponenten in diesem Handbuch:
- Verwendung von Systemctl zur Verwaltung von Systemd-Diensten und Einheiten
- Verwendung von Journalctl zum Anzeigen und Manipulieren von Systemd-Protokollen
- Verständnis von Systemd-Einheiten und Einheitsdateien
Indem Sie lernen, die Stärken Ihres Init-Systems zu nutzen, können Sie den Zustand Ihrer Maschinen steuern und Ihre Dienste und Prozesse einfacher verwalten.