• Allgemein
  • systemctl: Der Befehl zum Verwalten von Systemd-Diensten

systemctl: Der Befehl zum Verwalten von Systemd-Diensten

Was ist systemctl?

systemctl ist ein leistungsstarkes Befehlszeilentool zur Verwaltung von Systemd-Diensten, einem zentralen Bestandteil der meisten modernen Linux-Distributionen. Es bietet eine einheitliche Schnittstelle für die Interaktion mit Diensten und ermöglicht dir die vollständige Kontrolle über ihren Lebenszyklus.

Was ist Systemd?

Systemd ist ein Init-System, das den Systemstart und die Verwaltung von Prozessen auf Linux-Systemen übernimmt. Es ersetzt traditionelle Init-Systeme wie SysV und ist für seine modulare Architektur, schnelle Startzeiten und umfangreichen Verwaltungsfunktionen bekannt.

Warum systemctl verwenden?

systemctl ist das primäre Tool zur Interaktion mit Systemd-Diensten. Es bietet folgende Vorteile:

  • Zentralisierte Verwaltung: systemctl ermöglicht die Verwaltung aller Systemd-Dienste von einem einzigen Befehl aus.
  • Einheitliche Schnittstelle: Es verwendet eine konsistente Syntax für alle Dienstoperationen, was das Erlernen und Verwenden vereinfacht.
  • Erweiterte Funktionen: systemctl bietet erweiterte Funktionen wie die Möglichkeit, Einheiten zu maskieren, Dienste zu verketteten und Vorgabewerte zu verwenden.
  • Fehlerbehebung: systemctl kann bei der Diagnose von Dienstproblemen helfen und bietet detaillierte Fehlermeldungen.

Grundlegende Verwendung von systemctl

systemctl ist ein Befehlszeilentool zum Verwalten von Systemd-Diensten und anderen Einheiten. Es bietet eine einheitliche Schnittstelle für die Interaktion mit dem Systemmanager.

Syntax

Die grundlegende Syntax von systemctl lautet wie folgt:

systemctl [Parameter] [Einheit]

Parameter

Zu den häufig verwendeten Parametern gehören:

  • start: Startet die angegebene Einheit.
  • stop: Stoppt die angegebene Einheit.
  • restart: Startet die angegebene Einheit neu.
  • reload: Lädt die Konfiguration der angegebenen Einheit neu.
  • status: Zeigt den Status der angegebenen Einheit an.
  • enable: Aktiviert die angegebene Einheit, sodass sie beim Systemstart automatisch gestartet wird.
  • disable: Deaktiviert die angegebene Einheit, sodass sie nicht mehr automatisch gestartet wird.

Beispiel

Um beispielsweise den SSH-Dienst zu starten, kannst du folgenden Befehl verwenden:

systemctl start ssh

Um den Status des SSH-Dienstes abzufragen, kannst du folgenden Befehl verwenden:

systemctl status ssh

Aktivieren und Deaktivieren von Diensten

Aktivieren eines Dienstes

Mit systemctl kannst du Dienste aktivieren, sodass sie beim Systemstart automatisch gestartet werden. Dies ist nützlich für Dienste, die für den reibungslosen Betrieb deines Systems unerlässlich sind, wie z. B. den SSH-Dienst.

Um einen Dienst zu aktivieren, verwende den folgenden Befehl:

sudo systemctl enable <dienstname>

Beispiel:

sudo systemctl enable ssh

Deaktivieren eines Dienstes

Wenn du einen Dienst nicht mehr benötigst oder verhindern möchtest, dass er beim Systemstart ausgeführt wird, kannst du ihn deaktivieren.

Um einen Dienst zu deaktivieren, verwende den folgenden Befehl:

sudo systemctl disable <dienstname>

Beispiel:

sudo systemctl disable cups

Auswirkungen der Aktivierung und Deaktivierung

Wenn du einen Dienst aktivierst, wird ein symbolischer Link zu diesem Dienst in /etc/systemd/system/default.target.wants/ erstellt. Wenn du einen Dienst deaktivierst, wird dieser Link entfernt.

Best Practices

  • Aktiviere nur Dienste, die für den sicheren und ordnungsgemäßen Betrieb deines Systems erforderlich sind.
  • Deaktiviere Dienste, die du nicht verwendest, um unnötige Ressourcen zu sparen und die Sicherheit zu verbessern.
  • Verwende systemctl list-dependencies anstelle von systemctl enable, um sicherzustellen, dass alle Abhängigkeiten für einen Dienst aktiviert werden.

Dienststatus abfragen

Um den Status eines Dienstes abzufragen, verwendest du den Befehl systemctl:

Befehlssyntax

systemctl status <Dienstname>

Erläuterung des Dienstatus

Der Befehl systemctl status liefert folgende Informationen über den angegebenen Dienst:

  • Loaded: Gibt an, ob der Dienst in den Speicher geladen wurde.
  • Active: Gibt den aktuellen Status des Dienstes an (z. B. aktiv, inaktiv, fehlgeschlagen).
  • Sub: Gibt die Unterdienste an, die vom angegebenen Dienst abhängen.
  • CGroup: Zeigt die CGroup an, zu der der Dienst gehört.

Zusatzoptionen

Um weitere Informationen über den Dienststatus zu erhalten, kannst du folgende Optionen verwenden:

  • –full: Zeigt eine ausführlichere Statusmeldung an.
  • –verbose: Zeigt noch ausführlichere Informationen an, einschließlich der Einheitenkonfiguration.
  • –no-legend: Unterdrückt die Legende, die den Statusmeldungen entspricht.

Beispiel

Um den Status des Dienstes httpd abzufragen, gibst du folgenden Befehl ein:

systemctl status httpd

Ausgabe:

● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2023-03-08 17:23:34 PST; 1h 16min ago
 Main PID: 27638 (httpd)
   Tasks: 29 (limit: 4915)
   CGroup: /system.slice/httpd.service
           ├─27638 /usr/sbin/httpd -DFOREGROUND
           ├─27649 /usr/sbin/httpd -DFOREGROUND
           ├─27650 /usr/sbin/httpd -DFOREGROUND
           ├─27772 /usr/sbin/httpd -DFOREGROUND
           ├─27773 /usr/sbin/httpd -DFOREGROUND
           │ └─29354 /usr/sbin/httpd -DFOREGROUND
           ├─27811 /usr/sbin/httpd -DFOREGROUND
           ├─27812 /usr/sbin/httpd -DFOREGROUND
           ├─27853 /usr/sbin/httpd -DFOREGROUND
           ├─27866 /usr/sbin/httpd -DFOREGROUND
           ├─27867 /usr/sbin/httpd -DFOREGROUND
           ├─27889 /usr/sbin/httpd -DFOREGROUND
           ├─27890 /usr/sbin/httpd -DFOREGROUND
           ├─27913 /usr/sbin/httpd -DFOREGROUND
           ├─27914 /usr/sbin/httpd -DFOREGROUND
           ├─27915 /usr/sbin/httpd -DFOREGROUND
           ├─27916 /usr/sbin/httpd -DFOREGROUND
           ├─27926 /usr/sbin/httpd -DFOREGROUND
           ├─27943 /usr/sbin/httpd -DFOREGROUND
           ├─27944 /usr/sbin/httpd -DFOREGROUND
           ├─27945 /usr/sbin/httpd -DFOREGROUND
           ├─27946 /usr/sbin/httpd -DFOREGROUND
           ├─27947 /usr/sbin/httpd -DFOREGROUND
           ├─27951 /usr/sbin/httpd -DFOREGROUND
           ├─27952 /usr/sbin/httpd -DFOREGROUND
           ├─27953 /usr/sbin/httpd -DFOREGROUND
           ├─27993 /usr/sbin/httpd -DFOREGROUND
           ├─27994 /usr/sbin/httpd -DFOREGROUND
           ├─27995 /usr/sbin/httpd -DFOREGROUND
           ├─27996 /usr/sbin/httpd -DFOREGROUND
           ├─27997 /usr/sbin/httpd -DFOREGROUND
           ├─28045 /usr/sbin/httpd -DFOREGROUND
           ├─28046 /usr/sbin/httpd -DFOREGROUND
           ├─28047 /usr/sbin/httpd -DFOREGROUND
           ├─28108 /usr/sbin/httpd -DFOREGROUND
           └─28109 /usr/sbin/httpd -DFOREGROUND
Jan 01 00:00:08 ubuntu1804 systemd[1]: Starting The Apache HTTP Server...
Jan 01 00:00:08 ubuntu1804 httpd[27638]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1. Set the 'ServerName' directive globally to suppress this message
Jan 01 00:00:08 ubuntu1804 systemd[1]: Started The Apache HTTP Server.

Tagesprotokolle anzeigen

Um die Tagesprotokolle eines Dienstes anzuzeigen, kannst du den Befehl systemctl status verwenden.

So zeigst du die Tagesprotokolle an

Führe den folgenden Befehl aus, um die letzten zehn Zeilen des Tagesprotokolls eines Dienstes anzuzeigen:

systemctl status SERVICE_NAME --lines=10

Ersetze SERVICE_NAME durch den Namen des Dienstes, dessen Protokoll du anzeigen möchtest.

So zeigst du alle Tagesprotokolle an

Um alle Tagesprotokolle eines Dienstes anzuzeigen, führe folgenden Befehl aus:

journalctl -u SERVICE_NAME

So filterst du die Tagesprotokolle

Du kannst die Tagesprotokolle auch mithilfe von Filtern nach bestimmten Einträgen filtern.

Zum Beispiel, um die letzten zehn Fehlermeldungen im Tagesprotokoll anzuzeigen, führe folgenden Befehl aus:

journalctl -u SERVICE_NAME --priority=err --lines=10

So setzt du die Tagesprotokolle zurück

Um die Tagesprotokolle eines Dienstes zurückzusetzen, führe folgenden Befehl aus:

systemctl reset-failed SERVICE_NAME

Fehlerbehebung bei systemctl

systemctl ist in der Regel ein zuverlässiges Werkzeug, aber hin und wieder kann es zu Fehlern kommen. Hier sind einige häufige Probleme und ihre Lösungen:

Fehlender Dienst

Wenn du versuchst, einen Dienst zu starten, der nicht existiert, erhältst du eine Fehlermeldung wie "Unknown unit: x". Stelle sicher, dass du den vollständigen Einheitennamen einschließlich des Dateityps (.service, .timer usw.) angibst.

Berechtigungsfehler

Wenn du keine Root-Berechtigungen hast, kannst du systemctl-Befehle möglicherweise nicht ausführen. Führe den Befehl mit sudo aus:

sudo systemctl start my-service

Nicht aktivierter Dienst

Wenn ein Dienst nicht aktiviert ist, kannst du ihn nicht starten. Aktiviere den Dienst mit systemctl enable:

sudo systemctl enable my-service

Veraltetes Systemd

Wenn du eine ältere Version von Systemd verwendest, kann es sein, dass bestimmte systemctl-Befehle oder Optionen nicht unterstützt werden. Aktualisiere auf die neueste Version von Systemd für maximale Kompatibilität.

Fehlerprotokolle anzeigen

Wenn systemctl einen Fehler meldet, kannst du die Fehlerprotokolle einsehen, um weitere Informationen zu erhalten. Verwende den Befehl systemctl status <unit-name> mit der Option -l:

sudo systemctl status my-service -l

Hilfe-Option

Die Hilfeoption --help kann dir eine ausführliche Beschreibung der verfügbaren Optionen und der Syntax für einen bestimmten systemctl-Befehl geben:

systemctl --help start

Erweiterte Verwendung von systemctl

Vorgabeeinstellungen verwenden

Mit systemctl kannst du Vorgabeeinstellungen für Dienste festlegen, wie z. B. deren Startverhalten oder Abhängigkeiten. Dies kann mit dem Befehl systemctl set-default erreicht werden.

Einheiten verwalten

Einheiten sind die grundlegenden Bausteine von Systemd. Sie können Dienste, Geräte oder Mounts darstellen. Mit systemctl kannst du Einheiten erstellen, löschen und bearbeiten. Dies ist hilfreich für die Fehlersuche oder die Anpassung des Systemverhaltens.

Masken und Verknüpfungen verwenden

Masken und Verknüpfungen sind leistungsstarke Funktionen, mit denen du das Verhalten von Diensten steuern kannst. Masken können Dienste dauerhaft deaktivieren, während Verknüpfungen mehrere Einheiten zu einer einzigen abstrakten Einheit kombinieren können. Dies ermöglicht eine präzise Kontrolle über das Systemstartverhalten.

Fehlerbehebung bei komplexen Szenarien

Wenn du auf komplexe Probleme stößt, kannst du die Konfiguration von Systemd mit dem Befehl systemctl status überprüfen. Dieser Befehl zeigt detaillierte Informationen zum Status und den Abhängigkeiten von Diensten an. Darüber hinaus kannst du das Systemprotokoll mit journalctl überprüfen, um weitere Hinweise zu finden.

Verbindung zu Remote-Systemen

systemctl kann auch verwendet werden, um Dienste auf Remote-Systemen zu verwalten. Verwende dazu den Befehl systemctl remote, gefolgt von der IP-Adresse oder dem Hostnamen des Remote-Systems.

Weitere Ressourcen

Verwenden von Vorgabeeinstellungen

Damit du nicht jedes Mal die gleichen Optionen für systemctl angeben musst, kannst du Vorgabeeinstellungen festlegen. Diese Einstellungen werden dann automatisch auf alle systemctl-Befehle angewendet, bis du sie änderst.

Dauerhafte Vorgabeeinstellungen

Um dauerhafte Vorgabeeinstellungen festzulegen, bearbeite die Konfigurationsdatei /etc/systemd/system.conf. Füge die gewünschten Optionen hinzu oder ändere die vorhandenen Optionen.

[Manager]
DefaultTimeoutStartSec=30s
DefaultTimeoutStopSec=30s

In diesem Beispiel wird die Standardzeit zum Starten und Stoppen von Diensten auf 30 Sekunden festgelegt.

Vorübergehende Vorgabeeinstellungen

Um vorübergehende Vorgabeeinstellungen festzulegen, verwende die -global-Option. Diese Einstellungen gelten nur für die aktuelle systemctl-Instanz.

systemctl -global DefaultTimeoutStartSec=10s start docker.service

In diesem Befehl wird die Standardstartzeit für den Dienst docker auf 10 Sekunden festgelegt.

Spezielle Vorgabeeinstellungen

Neben den allgemeinen Vorgabeeinstellungen kannst du auch spezifische Vorgabeeinstellungen für einzelne Dienste oder Einheiten festlegen.

Einheitenvorgabeeinstellungen

Um Einheitenvorgabeeinstellungen festzulegen, bearbeite die Konfigurationsdatei der Einheit im Verzeichnis /etc/systemd/system. Füge die gewünschten Optionen wie folgt hinzu:

[Unit]
Description=My Custom Unit
DefaultDependencies=required-dep.service

In diesem Beispiel wird die Beschreibung der Einheit festgelegt und als Abhängigkeit der standardmäßige Dienst required-dep.service hinzugefügt.

Dienstvorgabeeinstellungen

Um Dienstvorgabeeinstellungen festzulegen, bearbeite die Dienstkonfigurationsdatei im Verzeichnis /etc/systemd/system. Füge die gewünschten Optionen wie folgt hinzu:

[Service]
ExecStart=/usr/bin/my-custom-service
Type=simple

In diesem Beispiel wird der ausführbare Startbefehl des Dienstes festgelegt und der Diensttyp auf simple festgelegt.

Verwalten von Einheiten

Neben Diensten verwaltet systemctl auch andere Entitäten, die als Einheiten bezeichnet werden. Eine Einheit kann ein Dienst, ein Einhängepunkt, eine Gerätedatei oder ein Sockel sein. Die Verwaltung von Einheiten bietet dir eine konsistente Schnittstelle zur Interaktion mit allen diesen Entitäten.

Auflisten von Einheiten

Verwende den Befehl systemctl list-units mit den Optionen --all und --no-legend, um alle Einheiten auf deinem System aufzulisten:

systemctl list-units --all --no-legend

Dieser Befehl gibt eine Liste aller Einheiten mit Informationen wie Status, Beschreibung und Abhängigkeiten aus.

Informationen zu Einheiten abfragen

Du kannst den Befehl systemctl show verwenden, um detaillierte Informationen zu einer bestimmten Einheit anzuzeigen:

systemctl show <Einheitsname>

Dieser Befehl gibt Informationen wie Beschreibung, Status, Abhängigkeiten und Konfigurationsparameter aus.

Aktivieren und Deaktivieren von Einheiten

Du kannst systemctl verwenden, um Einheiten zu aktivieren oder zu deaktivieren. Dies wirkt sich darauf aus, ob die Einheit beim Systemstart automatisch gestartet wird.

Um eine Einheit zu aktivieren, verwende den Befehl systemctl enable:

systemctl enable <Einheitsname>

Um eine Einheit zu deaktivieren, verwende den Befehl systemctl disable:

systemctl disable <Einheitsname>

Masken und Verknüpfungen

Systemd verwendet Masken und Verknüpfungen, um die Interaktion mit Einheiten zu vereinfachen.

  • Masken: Masken können verwendet werden, um Einheiten zu deaktivieren, ohne ihre Konfiguration zu ändern.
  • Verknüpfungen: Verknüpfungen können verwendet werden, um symbolische Links zu Einheiten zu erstellen, sodass du sie mit einem anderen Namen aufrufen kannst.

Weitere Informationen zur Verwendung von Masken und Verknüpfungen findest du in der Systemd-Dokumentation unter Unit Masking und Unit Aliases.

Verwenden von Masken und Verknüpfungen

Masken und Verknüpfungen sind in systemctl zwei Möglichkeiten, die Verwaltung von Systemd-Einheiten zu vereinfachen und zu abstrahieren.

Masken

Eine Maske ist eine Datei, die das Laden einer Einheit aus dem Dateisystem verhindert. Wenn du eine Maske für eine Einheit erstellst, wird diese nicht mehr automatisch beim Booten gestartet. Du kannst Masken verwenden, um Dienste zu deaktivieren, ohne sie zu entfernen.

Um eine Maske zu erstellen, kannst du den Befehl systemctl mask verwenden:

sudo systemctl mask <name-der-einheit>

Um eine Maske zu entfernen, verwende den Befehl systemctl unmask:

sudo systemctl unmask <name-der-einheit>

Verknüpfungen

Eine Verknüpfung ist eine Datei, die auf eine andere Einheit verweist. Wenn du eine Verknüpfung für eine Einheit erstellst, wird sie beim Starten oder Stoppen der Verknüpfung auch gestartet oder gestoppt.

Um eine Verknüpfung zu erstellen, kannst du den Befehl systemctl link verwenden:

sudo systemctl link <name-der-einheit> <name-der-verknüpfung>

Um eine Verknüpfung zu entfernen, verwende den Befehl systemctl unlink:

sudo systemctl unlink <name-der-einheit> <name-der-verknüpfung>

Masken und Verknüpfungen können sehr nützlich sein, um die Verwaltung von Systemd-Einheiten zu vereinfachen. Sie können dir dabei helfen, Dienste zu deaktivieren, ohne sie zu entfernen, und du kannst damit schnell und einfach Verknüpfungen zu häufig verwendeten Einheiten erstellen.