Dienste mit systemctl auf Ihrem VPS verwalten
Auf Ihrem VPS laufen Programme, die immer verfügbar sein müssen: der SSH-Server, ein Webserver, eine Datenbank. Solche Programme heißen Dienste. Unter Debian, Ubuntu, AlmaLinux und Rocky Linux werden sie von systemd gestartet und überwacht, und systemd bedienen Sie mit dem Befehl systemctl. Dies sind die Befehle, die Sie am häufigsten benötigen.
Der Status eines Dienstes
systemctl status nginx
Die Endung .service können Sie weglassen. Lesen Sie die Ausgabe von oben nach unten:
- Der Punkt vor dem Namen ist grün, wenn der Dienst läuft, weiß, wenn er gestoppt ist, und rot, wenn er fehlgeschlagen ist.
- Loaded gibt an, ob der Dienst beim Hochfahren startet (
enabled) oder nicht (disabled). - Active gibt an, ob er gerade läuft (
active (running)), gestoppt ist (inactive (dead)) oder fehlgeschlagen ist (failed), und seit wann. - Ganz unten stehen die letzten Zeilen aus dem Protokoll des Dienstes. Oft steht dort bereits, warum etwas schiefgeht.
Starten, stoppen und neu laden
| Befehl | Was er bewirkt |
|---|---|
sudo systemctl start nginx | Jetzt starten |
sudo systemctl stop nginx | Jetzt stoppen |
sudo systemctl restart nginx | Stoppen und wieder starten |
sudo systemctl reload nginx | Die Konfiguration neu einlesen, ohne zu stoppen |
Der Unterschied zwischen restart und reload ist wichtig. Bei einem Restart stoppt der Dienst kurz, und enthält die neue Konfiguration einen Fehler, startet er nicht mehr und Ihre Website ist offline. Bei einem Reload läuft der Dienst weiter; nginx behält bei einem Fehler die alte Konfiguration bei. Testen Sie daher zuerst die Konfiguration (sudo nginx -t, sudo sshd -t) und verwenden Sie dann reload. Nicht jeder Dienst unterstützt reload; sudo systemctl reload-or-restart entscheidet selbst.
Beim Hochfahren: enable und disable
Starten und „beim Hochfahren starten" sind zwei verschiedene Dinge. Starten Sie einen Dienst nur mit start, ist er nach dem nächsten Neustart, zum Beispiel durch ein Kernel-Update, wieder weg.
| Befehl | Was er bewirkt |
|---|---|
sudo systemctl enable --now nginx | Jetzt starten und künftig beim Hochfahren. Verwenden Sie dies für einen neuen Dienst |
sudo systemctl disable --now nginx | Jetzt stoppen und nicht mehr beim Hochfahren starten |
systemctl is-enabled nginx | Zeigt an, ob der Dienst beim Hochfahren startet |
Was ist los? Und was läuft?
systemctl --failed
Dies zeigt alle fehlgeschlagenen Dienste. Die Liste sollte leer sein. Prüfen Sie sie nach jedem Neustart und jedem Upgrade. Haben Sie das Problem behoben, entfernen Sie die Meldung mit sudo systemctl reset-failed.
systemctl list-units --type=service --state=runningzeigt alle laufenden Dienste. Kennen Sie einen davon nicht, finden Sie heraus, was er tut. Ein Dienst, den Sie nicht benötigen, ist ein unnötiger Zugang.systemctl list-timerszeigt die geplanten Aufgaben von systemd, mit dem Zeitpunkt der letzten und der nächsten Ausführung. So sehen Sie zum Beispiel, ob die Timer für automatische Updates oder die Erneuerung von Zertifikaten laufen.
Die Protokolle eines Dienstes
Möchten Sie mehr sehen als die wenigen Zeilen in systemctl status, verwenden Sie journalctl:
sudo journalctl -u nginx --since "1 hour ago" sudo journalctl -u nginx -p err -b
Der erste Befehl zeigt alles von nginx in der letzten Stunde, der zweite nur die Fehler seit dem letzten Neustart. Weitere Befehle finden Sie unter Logs lesen mit journalctl und docker logs.
Einstellungen eines Dienstes anpassen
Die Unit-Datei eines Pakets (in /usr/lib/systemd/system/) bearbeiten Sie nie, denn ein Update überschreibt sie. Verwenden Sie sudo systemctl edit nginx: Damit wird eine kleine Datei nur mit Ihren Änderungen angelegt und systemd liest sie neu ein. Was letztlich gilt, sehen Sie mit systemctl cat nginx.
sudo systemctl reboot neu oder mit Neu starten in der VPS-Ansicht. Erzwungenes Ausschalten ist wie Stecker ziehen: Dienste haben keine Gelegenheit, sauber zu stoppen, und eine Datenbank kann beschädigt werden. Siehe Die VPS-Ansicht: Ein- und Ausschalten, Grafiken, System und Protokoll.Unter AlmaLinux und Rocky Linux funktioniert systemctl genau gleich, nur heißen manche Dienste anders: Der SSH-Dienst heißt dort sshd statt ssh, Apache heißt httpd und die Firewall firewalld.
Möchten Sie mehr lernen? Besuchen Sie den kostenlosen Kurs VPS und Linux-Serververwaltung, Lektion 6.1 Dienste verwalten mit systemd oder Lektion 6.2 Logs lesen mit journalctl.
