systemctl ist das Hauptwerkzeug zur Verwaltung von Diensten auf den meisten modernen Linux-VPS-Distributionen. Es steuert Dienste, die von systemd verwaltet werden, einschließlich Webservern, Datenbanken, Bots, Spielserver-Daemons, Überwachungstools und benutzerdefinierten Diensten, die Sie selbst erstellen.
In den folgenden Beispielen ersetzen Sie nginx durch den Dienst, den Sie verwalten. Häufige Dienstnamen sind nginx, apache2, mariadb, mysql, docker, sshd und benutzerdefinierte Namen wie arkserver oder discordbot.
Einen Dienst überprüfen
Verwenden Sie status, bevor Sie einen Dienst neu starten. Es zeigt an, ob der Dienst läuft, ob er beim Booten aktiviert ist und gibt aktuelle Fehlermeldungen aus.
sudo systemctl status nginx
Der untenstehende Screenshot verwendet den SSH-Dienst als Beispiel; das gleiche Ausgabelayout gilt für andere systemd-Dienste.

Wenn die Ausgabe failed anzeigt, lesen Sie die Fehlermeldungen, bevor Sie den Dienst wiederholt neu starten.
Sie können auch Protokolle mit journalctl anzeigen:
sudo journalctl -u nginx --since "30 minutes ago"
Verfolgen Sie Live-Protokolle, während Sie den Dienst neu starten oder testen:
sudo journalctl -u nginx -f
Starten, stoppen, neu starten und neu laden
| Befehl | Was er macht |
|---|---|
sudo systemctl start nginx | Startet einen gestoppten Dienst. |
sudo systemctl stop nginx | Stoppt einen laufenden Dienst. |
sudo systemctl restart nginx | Stoppt und startet den Dienst erneut. |
sudo systemctl reload nginx | Lädt die Konfiguration neu, ohne einen vollständigen Neustart, wenn der Dienst Neuladungen unterstützt. |
sudo systemctl reload-or-restart nginx | Lädt neu, wenn möglich, ansonsten startet er neu. |
Verwenden Sie reload, wenn Sie nur eine Konfigurationsdatei geändert haben und der Dienst dies unterstützt. Verwenden Sie restart, wenn die Anwendung einen vollständigen Stopp/Start benötigt, um Änderungen zu übernehmen.
Start beim Booten aktivieren oder deaktivieren
Das Starten eines Dienstes jetzt und das Aktivieren beim Booten sind unterschiedliche Aktionen. Wenn Sie möchten, dass ein Dienst nach einem VPS-Neustart wiederkommt, aktivieren Sie ihn.
sudo systemctl enable nginx sudo systemctl start nginx
Um ihn in einem Befehl zu aktivieren und zu starten:
sudo systemctl enable --now nginx
Um zu verhindern, dass er automatisch beim Booten startet:
sudo systemctl disable nginx
Mehrere Dienste neu starten
Sie können vielen systemctl-Befehlen mehr als einen Dienstnamen übergeben:
sudo systemctl restart nginx php8.2-fpm mariadb
Dies ist nützlich, nachdem Sie einen Stack geändert haben, bei dem mehrere Dienste voneinander abhängen, wie ein Webserver, PHP-FPM und eine Datenbank.
Verwendung von Wildcards
systemctl kann Dienstnamen mit Wildcards abgleichen. Dies ist nützlich, aber verwenden Sie es vorsichtig, da es mehr Dienste betreffen kann, als Sie beabsichtigt haben.
Zum Beispiel zeigt dies alle passenden PHP-FPM-Dienste:
systemctl list-units 'php*-fpm.service'
Nachdem Sie die Übereinstimmungen überprüft haben, können Sie passende Dienste neu starten:
sudo systemctl restart 'php*-fpm.service'
Listen Sie immer zuerst die Übereinstimmungen auf, bevor Sie einen Platzhalter mit restart, stop oder disable verwenden.
Einen benutzerdefinierten Dienst erstellen
Sie können einen benutzerdefinierten systemd-Dienst für einen Spielserver, Bot oder Skript erstellen, damit er beim Booten startet und mit systemctl verwaltet werden kann.
Erstellen Sie eine Unit-Datei in /etc/systemd/system/:
sudo nano /etc/systemd/system/myserver.service
Eine einfache Dienstdatei sieht so aus:
[Unit] Description=Mein benutzerdefinierter Server After=network.target [Service] Type=simple User=myuser WorkingDirectory=/home/myuser/myserver ExecStart=/home/myuser/myserver/start.sh Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target
Nach dem Erstellen oder Ändern einer Dienstdatei laden Sie systemd neu, damit es die neue Unit erkennt:
sudo systemctl daemon-reload
Aktivieren und starten Sie es dann:
sudo systemctl enable --now myserver
Überprüfen Sie es mit:
sudo systemctl status myserver sudo journalctl -u myserver -f
Wenn der Dienst fehlschlägt, überprüfen Sie den Pfad in ExecStart, den User, die Dateiberechtigungen und ob das Startskript manuell ausgeführt wird, bevor Sie versuchen, es über systemd auszuführen.
