15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen
31.10.2024

Systemctl-Befehle: Wie man Dienste in Linux neu startet, neu lädt und stoppt

Die effiziente Verwaltung von Diensten ist eine der wichtigsten Fähigkeiten für jeden Linux-Systemadministrator. Egal ob Sie einen stark frequentierten Webserver auf einem VPS Hosting-Plan betreiben oder eine Dedicated Server-Umgebung verwalten, das Verständnis für die Kontrolle von Systemdiensten mit systemctl ist absolut unverzichtbar. Dieser umfassende Leitfaden behandelt alles, was Sie über das Neustarten, Neuladen und Beenden von Diensten in Linux mit systemd und systemctl wissen müssen.

Was ist systemd und warum ist es wichtig?

systemd ist das Standard-Init-System und der Service-Manager, der in praktisch allen modernen Linux-Distributionen verwendet wird, einschließlich Ubuntu, Debian, CentOS, Rocky Linux, AlmaLinux und Fedora. Es ersetzte ältere Init-Systeme wie SysVinit und Upstart und brachte erhebliche Verbesserungen bei der Verwaltung des Linux-Starts und der Prozessabläufe.

Wichtigste Funktionen von systemd

  • Paralleler Service-Start — Reduziert die Startzeiten drastisch durch gleichzeitiges Starten von Diensten
  • On-Demand-Service-Aktivierung — Dienste können nur bei Bedarf gestartet werden und sparen Systemressourcen
  • Abhängigkeitsverwaltung — Verwaltet automatisch Service-Abhängigkeiten und Reihenfolge
  • Zentralisierte Protokollierung — Integriert mit journald für einheitliche, strukturierte Protokollverwaltung
  • Cgroup-basierte Ressourcenkontrolle — Verfolgt und begrenzt CPU-, Speicher- und I/O-Nutzung pro Service
  • Socket- und D-Bus-Aktivierung — Ermöglicht fortgeschrittene Interprozess-Kommunikationsmuster

Das Verständnis von systemd ist nicht nur theoretisch — es wirkt sich direkt auf die Stabilität, Leistung und Sicherheit Ihrer Linux-Umgebung aus.

Was ist systemctl?

systemctl ist die primäre Befehlszeilenschnittstelle für die Interaktion mit systemd. Sie ermöglicht Administratoren:

  • Dienste zu starten, zu stoppen, neu zu starten und neu zu laden
  • Dienste beim Start zu aktivieren oder zu deaktivieren
  • Service-Status zu prüfen und Protokolle anzuzeigen
  • Systemziele (Runlevel) zu verwalten
  • Die systemd-Daemon-Konfiguration neu zu laden

Alle systemctl-Befehle, die den Systemzustand ändern, erfordern Root-Rechte oder sudo-Zugriff.

Grundlegende systemctl-Befehle für die Service-Verwaltung

1. Neustarten eines Service

Das Neustarten eines Service stoppt ihn vollständig und startet ihn dann neu. Dies ist die bevorzugte Operation, wenn:

  • Sie Konfigurationsänderungen vorgenommen haben, die einen vollständigen Prozessneustart erfordern
  • Ein Service abgestürzt ist oder nicht mehr reagiert
  • Sie aktualisierte Binärdateien nach einem Paket-Upgrade anwenden müssen

Syntax:

sudo systemctl restart <service_name>

Beispiel — Nginx-Webserver neu starten:

sudo systemctl restart nginx

Beispiel — Apache-Webserver neu starten:

sudo systemctl restart apache2

Beispiel — MySQL/MariaDB-Datenbank neu starten:

sudo systemctl restart mysql

> Wichtig: Das Neustarten eines Service verursacht eine kurze Unterbrechung. Für Produktionsumgebungen sollten Sie reload verwenden, wenn unterstützt, um Ausfallzeiten zu vermeiden.

2. Neuladen eines Service

Das Neuladen weist einen laufenden Service an, seine Konfigurationsdateien ohne Stoppen des Prozesses neu zu lesen. Dies ist ideal, um Konfigurationsänderungen ohne Ausfallzeiten anzuwenden.

Syntax:

sudo systemctl reload <service_name>

Beispiel — Nginx nach Bearbeitung seiner Konfiguration neu laden:

sudo systemctl reload nginx

Beispiel — SSH-Daemon nach Änderung von sshd_config neu laden:

sudo systemctl reload sshd

> Hinweis: Nicht alle Dienste unterstützen die reload-Operation. Wenn ein Service dies nicht implementiert, gibt systemctl einen Fehler zurück. Verwenden Sie in diesen Fällen stattdessen restart.

Pro-Tipp — Verwenden Sie reload-or-restart für maximale Kompatibilität:

sudo systemctl reload-or-restart <service_name>

Dieser Befehl versucht zuerst ein Neuladen. Wenn der Service das Neuladen nicht unterstützt, wird automatisch auf einen vollständigen Neustart zurückgegriffen — was es zur sichersten Option für skriptgesteuerte Bereitstellungen und Automatisierung macht.

3. Stoppen eines Service

Das Stoppen eines Service beendet ihn sofort. Verwenden Sie dies, wenn Sie einen Service für Wartung, Fehlerbehebung oder Neukonfiguration offline nehmen müssen.

Syntax:

sudo systemctl stop <service_name>

Beispiel — Nginx-Webserver stoppen:

sudo systemctl stop nginx

Beispiel — Firewall-Service stoppen:

sudo systemctl stop ufw

> Warnung: Das Stoppen eines kritischen Service (wie sshd auf einem Remote-Server) kann Sie aus Ihrem System aussperren. Stellen Sie immer sicher, dass Sie eine alternative Zugriffsmethode haben, wie eine Konsole oder Out-of-Band-Verwaltung, bevor Sie wesentliche Services stoppen.

4. Starten eines Service

Wenn ein Service nicht gerade läuft, verwenden Sie den start-Befehl, um ihn zu starten.

Syntax:

sudo systemctl start <service_name>

Beispiel:

sudo systemctl start nginx

5. Aktivieren eines Service beim Start

Das Aktivieren eines Service erstellt die notwendigen Symlinks, damit systemd ihn während des Systemstarts automatisch startet.

Syntax:

sudo systemctl enable <service_name>

Beispiel:

sudo systemctl enable nginx

Gleichzeitiges Aktivieren und Starten (empfohlen):

sudo systemctl enable --now nginx

6. Deaktivieren eines Service beim Start

Das Deaktivieren eines Service verhindert, dass er automatisch startet, stoppt ihn aber nicht, wenn er gerade läuft.

Syntax:

sudo systemctl disable <service_name>

Beispiel:

sudo systemctl disable bluetooth

Gleichzeitiges Deaktivieren und Stoppen:

sudo systemctl disable --now bluetooth

7. Prüfen des Service-Status

Der status-Befehl ist einer der am häufigsten verwendeten systemctl-Befehle. Er bietet einen Echtzeit-Überblick über den Zustand eines Service, einschließlich der letzten Protokolleinträge.

Syntax:

sudo systemctl status <service_name>

Beispiel — Status von Nginx prüfen:

sudo systemctl status nginx

Beispielausgabe:

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-01-15 10:23:45 UTC; 2h 34min ago
       Docs: man:nginx(8)
    Process: 1234 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 1235 (nginx)
      Tasks: 3 (limit: 4915)
     Memory: 6.2M
        CPU: 45ms
     CGroup: /system.slice/nginx.service
             ├─1235 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─1236 "nginx: worker process"

Die Ausgabe enthält:

  • Loaded — Ob die Unit-Datei geladen ist und ob sie beim Start aktiviert ist
  • Active — Aktueller Laufzustand (active (running), inactive (dead), failed, usw.)
  • Main PID — Die primäre Prozess-ID des Service
  • Memory/CPU — Ressourcenverbrauchsmetriken
  • CGroup — Die Control-Group-Hierarchie
  • Recent logs — Letzte Journal-Einträge für schnelle Diagnose

Erweiterte systemctl-Befehle

Prüfen, ob ein Service aktiv oder aktiviert ist

Zur Verwendung in Skripten und Automatisierung geben diese Befehle einfache boolesche Exit-Codes zurück:

# Check if a service is currently running
systemctl is-active nginx

# Check if a service is enabled at boot
systemctl is-enabled nginx

# Check if a service has failed
systemctl is-failed nginx

Alle Services auflisten

# List all loaded and active units
systemctl list-units --type=service

# List all installed unit files and their states
systemctl list-unit-files --type=service

# List only failed services
systemctl --failed

Neuladen des systemd-Daemon

Nach dem Erstellen oder Ändern von Unit-Dateien müssen Sie den systemd-Daemon neu laden, um die Änderungen zu erkennen:

sudo systemctl daemon-reload

Maskieren und Aufheben der Maskierung eines Service

Das Maskieren eines Service verhindert, dass er manuell oder automatisch gestartet wird — auch nicht durch andere Services:

# Prevent a service from ever starting
sudo systemctl mask <service_name>

# Re-enable a masked service
sudo systemctl unmask <service_name>

Schnellreferenz: systemctl-Befehls-Spickzettel

BefehlBeschreibung
systemctl start <service>Einen gestoppten Service starten
systemctl stop <service>Einen laufenden Service stoppen
systemctl restart <service>Einen Service stoppen und neu starten
systemctl reload <service>Konfiguration neu laden ohne zu stoppen
systemctl reload-or-restart <service>Neu laden, falls unterstützt, sonst neu starten
systemctl enable <service>Service beim Start aktivieren
systemctl disable <service>Service beim Start deaktivieren
systemctl enable --now <service>Aktivieren und sofort starten
systemctl disable --now <service>Deaktivieren und sofort stoppen
systemctl status <service>Service-Status und Protokolle anzeigen
systemctl is-active <service>Prüfen, ob Service läuft
systemctl is-enabled <service>Prüfen, ob Service beim Start startet
systemctl is-failed <service>Prüfen, ob Service fehlgeschlagen ist
systemctl list-units --type=serviceAlle aktiven Services auflisten
systemctl --failedAlle fehlgeschlagenen Services auflisten
systemctl daemon-reloadsystemd-Unit-Dateien neu laden
systemctl mask <service>Service vollständig am Start hindern
systemctl unmask <service>Maskierung von Service entfernen

Praktische Anwendungsfälle für Server-Administratoren

Szenario 1: Anwenden von Nginx-Konfigurationsänderungen

Sie haben /etc/nginx/nginx.conf auf Ihrem Webserver bearbeitet. Um Änderungen anzuwenden, ohne aktive Verbindungen zu unterbrechen:

# First, test the configuration syntax
sudo nginx -t

# If the test passes, reload gracefully
sudo systemctl reload nginx

Szenario 2: Wiederherstellen eines fehlgeschlagenen Service

Ein Service ist abgestürzt und zeigt einen failed-Zustand:

# Check what went wrong
sudo systemctl status myapp.service

# View full logs for the service
sudo journalctl -u myapp.service -n 50 --no-pager

# Restart the service
sudo systemctl restart myapp.service

Szenario 3: Einrichten eines neuen Service nach der Bereitstellung

Nach der Bereitstellung einer neuen Anwendung mit einer benutzerdefinierten Unit-Datei:

# Reload systemd to recognize the new unit file
sudo systemctl daemon-reload

# Enable and start the service in one command
sudo systemctl enable --now myapp.service

# Verify it's running correctly
sudo systemctl status myapp.service

Unterschied zwischen restart, reload und stop — Auf einen Blick

AktionProzess gestoppt?Ausfallzeit?Anwendungsfall
stopJaJaWartung, Fehlerbehebung
restartJa, dann neu gestartet
15%

15% auf alle Hosting-Dienste sparen

Teste deine Fähigkeiten und erhalte Rabatt auf jeden Hosting-Plan

Benutze den Code:

Skills
Anfangen