Linux systemctl-Befehl
Was ist systemctl
systemctl ist ein Kommandozeilenwerkzeug in Linux-Systemen, das verwendet wird, um den systemd-System- und Dienstmanager zu steuern. Als Kernkomponente moderner Linux-Distributionen ersetzt es das traditionelle init-System und die Dienstbefehle.
Einführung in systemd
systemd ist ein System- und Dienstmanager, der:
- Läuft als PID 1 (der erste Prozess, der gestartet wird)
- Verantwortlich für das Starten, Stoppen und Verwalten aller anderen Prozesse
- Bietet die Möglichkeit zum parallelen Starten, wodurch die Systemstartzeit erheblich verkürzt wird
- Unterstützt bedarfsgesteuertes Starten von Diensten
- Bietet Funktionen zur Protokollerfassung (über journald)
Grundlegende systemctl-Syntax
systemctl [选项] [命令] [单元名称]
Häufige Optionen
| Option | Beschreibung |
|---|---|
| -t, --type | Unit-Typ angeben (service, socket, device usw.) |
| -a, --all | Alle Units anzeigen, einschließlich inaktiver |
| --state | Units nach Status filtern |
| -l, --full | Vollständige Unit-Informationen anzeigen |
| -H, --host | Auf einem Remote-Host ausführen |
Befehle zur Dienstverwaltung
Dienste starten/stoppen/neu starten
Beispiel
# Service starten
sudo systemctl start [Dienstname]
# Dienst stoppen
sudo systemctl stop [Dienstname]
# Dienst neu starten
sudo systemctl restart [Dienstname]
# Konfiguration neu laden (ohne Neustart des Dienstes)
sudo systemctl reload [Dienstname]
sudo systemctl start [Dienstname]
# Dienst stoppen
sudo systemctl stop [Dienstname]
# Dienst neu starten
sudo systemctl restart [Dienstname]
# Konfiguration neu laden (ohne Neustart des Dienstes)
sudo systemctl reload [Dienstname]
Dienststatus anzeigen
Beispiel
# Status eines einzelnen Dienstes anzeigen
systemctl status [Dienstname]
# Alle laufenden Dienste anzeigen
systemctl list-units --type=service --state=running
# Fehlgeschlagene Dienste anzeigen
systemctl --failed
systemctl status [Dienstname]
# Alle laufenden Dienste anzeigen
systemctl list-units --type=service --state=running
# Fehlgeschlagene Dienste anzeigen
systemctl --failed
Dienste aktivieren/deaktivieren
Beispiel
# Dienst aktivieren (automatischer Start beim Booten)
sudo systemctl enable [Dienstname]
# Dienst deaktivieren (Autostart beim Booten aufheben)
sudo systemctl disable [Dienstname]
# Prüfen, ob Dienst aktiviert ist
systemctl is-enabled [Dienstname]
sudo systemctl enable [Dienstname]
# Dienst deaktivieren (Autostart beim Booten aufheben)
sudo systemctl disable [Dienstname]
# Prüfen, ob Dienst aktiviert ist
systemctl is-enabled [Dienstname]
Unit-Datei-Verwaltung
Speicherorte der Unit-Dateien
- System-Units:
/usr/lib/systemd/system/ - Benutzerdefinierte Units des Administrators:
/etc/systemd/system/
Gängige Unit-Datei-Operationen
Beispiel
# Alle Unit-Dateien neu laden (erforderlich nach Änderung der Konfiguration)
sudo systemctl daemon-reload
# Inhalt der Unit-Datei anzeigen
systemctl cat [Unit-Name]
# Unit-Datei bearbeiten (erstellt eine Override-Datei)
sudo systemctl edit [Unit-Name] --full
sudo systemctl daemon-reload
# Inhalt der Unit-Datei anzeigen
systemctl cat [Unit-Name]
# Unit-Datei bearbeiten (erstellt eine Override-Datei)
sudo systemctl edit [Unit-Name] --full
Systemzustandsverwaltung
System-Energieverwaltung
Beispiel
# Herunterfahren
sudo systemctl poweroff
# Neustart
sudo systemctl reboot
# Suspendieren
sudo systemctl suspend
# Ruhezustand
sudo systemctl hibernate
sudo systemctl poweroff
# Neustart
sudo systemctl reboot
# Suspendieren
sudo systemctl suspend
# Ruhezustand
sudo systemctl hibernate
System-Runlevels
Beispiel
# Aktuelles Target (Runlevel) abrufen
systemctl get-default
# Standard-Target festlegen
sudo systemctl set-default [Target-Name]
# Target wechseln (wirkt sofort)
sudo systemctl isolate [Target-Name]
systemctl get-default
# Standard-Target festlegen
sudo systemctl set-default [Target-Name]
# Target wechseln (wirkt sofort)
sudo systemctl isolate [Target-Name]
Übliche Targets:
- graphical.target - grafischer Oberflächenmodus
- multi-user.target - Mehrbenutzer-Textmodus
- rescue.target - Rettungsmodus
- emergency.target - Notfallmodus
Praktische Beispiele
Beispiel 1: Nginx-Dienst verwalten
Beispiel
# Nginx starten
sudo systemctl start nginx
# Automatischen Start beim Booten aktivieren
sudo systemctl enable nginx
# Status prüfen
systemctl status nginx
# Konfiguration testen, dann neu laden
sudo nginx -t # Konfiguration zuerst testen
sudo systemctl reload nginx
sudo systemctl start nginx
# Automatischen Start beim Booten aktivieren
sudo systemctl enable nginx
# Status prüfen
systemctl status nginx
# Konfiguration testen, dann neu laden
sudo nginx -t # Konfiguration zuerst testen
sudo systemctl reload nginx
Beispiel 2: Einen benutzerdefinierten Dienst erstellen
- Dienstdatei erstellen
/etc/systemd/system/myapp.service:
Beispiel
[Unit]
Description=Meine benutzerdefinierte Anwendung
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Installation]
WantedBy=multi-user.target
Description=Meine benutzerdefinierte Anwendung
After=network.target
[Service]
ExecStart=/usr/bin/python3 /opt/myapp/app.py
WorkingDirectory=/opt/myapp
User=myappuser
Group=myappgroup
Restart=always
[Installation]
WantedBy=multi-user.target
- Dienst aktivieren und starten:
Beispiel
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl enable myapp
sudo systemctl start myapp
Fehlerbehebung bei häufigen Problemen
Dienst konnte nicht gestartet werden
Detaillierte Protokolle anzeigen:
journalctl -u [服务名] -xe
Abhängigkeiten prüfen:
systemctl list-dependencies [服务名]
Im Debug-Modus ausführen:
systemctl status [服务名] -l --no-pager
Leistungsanalyse
Beispiel
# Systemstartzeit anzeigen
systemd-analyze
# Startzeit jedes Dienstes anzeigen
systemd-analyze blame
# Startdiagramm generieren (erfordert grafische Oberfläche)
systemd-analyze plot > boot.svg
systemd-analyze
# Startzeit jedes Dienstes anzeigen
systemd-analyze blame
# Startdiagramm generieren (erfordert grafische Oberfläche)
systemd-analyze plot > boot.svg
Linux-Befehlsreferenz