Direkt zum Inhalt

Cookie-Einstellungen

Wählen Sie, welche Arten von Cookies Sie erlauben. Sie können Ihre Auswahl jederzeit über Cookie-Einstellungen unten auf jeder Seite ändern. Datenschutzerklärung

Notwendig

Immer aktiv

Nötig zum Einloggen, für Ihren Warenkorb und um Ihre Auswahl zu speichern. Diese sind immer aktiv.

Welche Cookies?
  • weboke_sessie, weboke_klant, weboke_remember: Ihre Sitzung und eingeloggt bleiben
  • weboke_basket: Ihr Warenkorb
  • wkBtwIncl: Preise mit oder ohne MwSt. anzeigen
  • wok_cookies: Ihre Cookie-Auswahl, 12 Monate

Misst, welche Anzeige zu einem Besuch oder einer Bestellung führt, damit wir nicht für Anzeigen zahlen, die nichts bringen.

Welche Cookies?
  • Google Ads über Google Tag Manager (_gcl_au, _gcl_aw), bis zu 90 Tage
  • OpenAI Ads, Anzeigen in ChatGPT
  • wok_aff: über welchen Partner Sie zu uns kamen (Partnerprogramm), 60 Tage

4,6

Land und Sprache

Jedes Land hat seine eigene Website, mit Preisen und MwSt. dieses Landes.

Anzeigen

Modul 6 · 6.1

Dienste mit systemd verwalten

Modul 6: Dienste und Logs · Lesezeit: 10 Minuten

Lernziel: Nach dieser Lektion können Sie Dienste starten, stoppen, neu laden und beim Hochfahren automatisch starten lassen, den Status eines Dienstes lesen und eine Einstellung eines Dienstes mit einem Drop-in sicher anpassen.

Kernbegriffe: systemd, Unit, Service, systemctl, start, stop, restart, reload, enable, disable, --now, active, inactive, failed, systemctl --failed, Drop-in, systemctl edit, daemon-reload, Restart=

Wer hält alles am Laufen?

Auf einem Server laufen Dutzende Programme, die immer verfügbar sein müssen: der SSH-Server, der Webserver, eine Datenbank, die Zeitsynchronisation. Solche Programme heißen Dienste (Services oder Daemons). Jemand muss sie beim Hochfahren starten, überwachen und neu starten, wenn sie abstürzen. Unter Debian, Ubuntu, AlmaLinux und Rocky Linux übernimmt das systemd. Es ist das erste Programm, das der Kernel startet (Prozess 1), und es startet danach alles andere.

systemd arbeitet mit Units: Beschreibungen von etwas, das es verwalten soll. Die wichtigsten Arten:

ArtEndungBeispiel
Dienst.servicenginx.service, ssh.service
Timer (geplante Aufgabe).timerapt-daily.timer (Lektion 4.2, Lektion 6.3)
Socket.socketssh.socket unter Ubuntu 24.04 und neuer
Ziel (Gruppe von Units).targetmulti-user.target

Mit systemd kommunizieren Sie über den Befehl systemctl. Die Endung .service dürfen Sie weglassen: systemctl status nginx ist dasselbe wie systemctl status nginx.service.

Den Status lesen

Der Befehl, den Sie am häufigsten verwenden:

anna@web1:~$ systemctl status nginx
● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
     Active: active (running) since Mon 2026-11-09 08:12:44 CET; 3h 2min ago
       Docs: man:nginx(8)
    Process: 902 ExecStartPre=/usr/sbin/nginx -t -q -g daemon on; master_process on; (code=exited, status=0/SUCCESS)
   Main PID: 905 (nginx)
      Tasks: 3 (limit: 2275)
     Memory: 4.1M (peak: 6.3M)
        CPU: 213ms
     CGroup: /system.slice/nginx.service
             ├─905 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
             └─906 "nginx: worker process"

nov 09 08:12:44 web1 systemd[1]: Starting nginx.service - A high performance web server...
nov 09 08:12:44 web1 systemd[1]: Started nginx.service - A high performance web server...

Lesen Sie die Ausgabe von oben nach unten:

  • Der Punkt vor dem Namen ist grün bei einem laufenden Dienst, weiß bei einem gestoppten und rot bei einem fehlgeschlagenen.
  • Loaded zeigt, wo die Unit-Datei liegt und ob der Dienst beim Hochfahren startet (enabled) oder nicht (disabled).
  • Active zeigt, ob er gerade läuft (active (running)), gestoppt ist (inactive (dead)) oder fehlgeschlagen ist (failed), und seit wann.
  • Main PID und CGroup zeigen, welche Prozesse zum Dienst gehören.
  • Ganz unten stehen die letzten Zeilen aus dem Log des Dienstes. Oft steht dort schon, warum etwas schiefgeht; mehr lesen Sie mit journalctl (Lektion 6.2).

Starten, stoppen, neu starten und neu laden

anna@web1:~$ sudo systemctl start nginx      # jetzt starten
anna@web1:~$ sudo systemctl stop nginx       # jetzt stoppen
anna@web1:~$ sudo systemctl restart nginx    # stoppen und wieder starten
anna@web1:~$ sudo systemctl reload nginx     # Konfiguration neu einlesen, ohne zu stoppen

Der Unterschied zwischen restart und reload ist in der Praxis wichtig. Bei einem Restart stoppt der Dienst kurz: Laufende Verbindungen werden getrennt, und wenn die neue Konfiguration einen Fehler enthält, startet er nicht mehr und Ihre Website ist offline. Bei einem Reload liest der Dienst seine Konfiguration neu ein, während er weiterläuft; bei einem Fehler in der Konfiguration behält nginx die alte. Verwenden Sie für nginx, Caddy, SSH und fail2ban nach einer Konfigurationsänderung also reload, und testen Sie die Konfiguration vorher (nginx -t, sshd -t, fail2ban-client -t). Nicht jeder Dienst unterstützt reload; systemctl reload-or-restart wählt selbst.

Beim Hochfahren: enable und disable

Starten und „beim Hochfahren starten“ sind zwei verschiedene Dinge:

anna@web1:~$ sudo systemctl enable nginx         # startet ab jetzt beim Hochfahren
anna@web1:~$ sudo systemctl disable nginx        # nicht mehr beim Hochfahren
anna@web1:~$ sudo systemctl enable --now nginx   # beides: jetzt starten und beim Hochfahren
anna@web1:~$ systemctl is-enabled nginx
enabled

Ein klassischer Fehler: Sie starten einen Dienst mit start, alles funktioniert, und nach dem nächsten Neustart (zum Beispiel wegen eines Kernel-Updates, Lektion 4.2) ist er weg. Verwenden Sie für einen neuen Dienst deshalb enable --now.

Möchten Sie sicherstellen, dass ein Dienst nie startet, auch nicht, wenn ein anderer Dienst ihn anfordert, gibt es mask: sudo systemctl mask <dienst>. Rückgängig machen Sie das mit unmask.

Was ist kaputt?

Ein einziger Befehl zeigt alle fehlgeschlagenen Units:

anna@web1:~$ systemctl --failed
  UNIT                LOAD   ACTIVE SUB    DESCRIPTION
● php8.4-fpm.service  loaded failed failed The PHP 8.4 FastCGI Process Manager

1 loaded units listed.

Machen Sie daraus eine Gewohnheit, zum Beispiel nach jedem Neustart und jedem Upgrade (Lektion 4.3): Die Liste sollte leer sein. Nach der Behebung entfernen Sie die Meldung mit sudo systemctl reset-failed.

Eine Übersicht aller laufenden Dienste:

anna@web1:~$ systemctl list-units --type=service --state=running

Läuft etwas, das Sie nicht kennen oder nicht nutzen, finden Sie heraus, was es ist. Jeder Dienst, der nicht benötigt wird, ist überflüssige Angriffsfläche (Lektion 5.1 und 10.1).

Unit-Dateien und Drop-ins

Eine Unit-Datei ist eine Textdatei. Die Version des Pakets liegt in /usr/lib/systemd/system/ (auf älteren Systemen /lib/systemd/system/). Diese Datei ändern Sie nie: Ein Update des Pakets überschreibt sie. Eigene Änderungen gehören in ein Drop-in: eine kleine Datei, die nur die Zeilen enthält, die Sie ändern möchten. Am einfachsten geht das mit:

anna@web1:~$ sudo systemctl edit nginx

Es öffnet sich ein Editor mit einem leeren Bereich zwischen zwei Kommentarzeilen. Was Sie dort eintragen, landet in /etc/systemd/system/nginx.service.d/override.conf. Zum Beispiel: nginx automatisch neu starten, wenn er unerwartet stoppt.

[Service]
Restart=on-failure
RestartSec=5s

Nach dem Speichern lädt systemctl edit die Konfiguration von systemd automatisch neu. Bearbeiten Sie eine Unit-Datei auf andere Weise, führen Sie selbst Folgendes aus:

anna@web1:~$ sudo systemctl daemon-reload
anna@web1:~$ sudo systemctl restart nginx

daemon-reload lässt systemd die Unit-Dateien neu einlesen; der Dienst selbst muss danach noch neu gestartet werden, um die Änderung zu übernehmen. Das vollständige Ergebnis (Original plus Drop-ins) sehen Sie mit systemctl cat nginx.

Restart=on-failure ist eine gute Gewohnheit für wichtige Dienste. Verdecken Sie damit aber keinen echten Fehler: Ein Dienst, der alle fünf Sekunden abstürzt und neu startet, gehört im Log untersucht. systemd hört nach einigen schnell aufeinanderfolgenden Fehlschlägen mit dem Neustarten auf (die Standardgrenze liegt bei fünf Starts innerhalb von zehn Sekunden) und setzt den Dienst auf failed.

Unter AlmaLinux und Rocky Linux

systemd und systemctl funktionieren genau gleich. Nur die Namen der Dienste unterscheiden sich manchmal: Der SSH-Dienst heißt sshd, der Webserver der Distribution heißt httpd (Apache) oder nginx, und die Firewall firewalld.

In der Praxis

Die VPS-Oberfläche Ihres Anbieters (bei WebOké und anderswo) kann den gesamten Server ausschalten, neu starten oder „hart ausschalten“. Letzteres entspricht dem Ziehen des Steckers: Dienste haben keine Gelegenheit, sauber zu beenden, und eine Datenbank kann dabei beschädigt werden. Verwenden Sie innerhalb des Servers sudo systemctl reboot oder sudo shutdown -h now und im Panel die normale Schaltfläche zum Herunterfahren oder Neustarten.

Zusammenfassung

  • systemd startet und überwacht alle Dienste; Sie bedienen es mit systemctl.
  • systemctl status zeigt, ob ein Dienst läuft, ob er beim Hochfahren startet, und die letzten Logzeilen.
  • start/stop/restart gelten für jetzt, enable/disable für das Hochfahren; verwenden Sie enable --now für einen neuen Dienst.
  • Nach einer Konfigurationsänderung: erst testen, dann reload; systemctl --failed sollte leer sein.
  • Ändern Sie nie die Unit-Datei eines Pakets, sondern verwenden Sie ein Drop-in mit systemctl edit.

Quiz

1. Sie haben einen neuen Dienst mit systemctl start gestartet. Nach einem Neustart des Servers läuft er nicht. Warum?



2. Sie haben die Konfiguration von nginx geändert. Was ist die sicherste Reihenfolge?



3. Wohin gehört Ihre eigene Anpassung an der Unit-Datei eines Pakets?



4. systemctl status zeigt Loaded: loaded (...; disabled; ...) und Active: active (running). Was bedeutet das?



5. Ein Dienst hat Restart=on-failure und stürzt alle paar Sekunden ab. Wie setzt man diese Einstellung richtig ein?



Aufgabe

Aufgabe O6.1: Ihre Dienste im Überblick. Erstellen Sie auf Ihrem Server eine Liste aller laufenden Dienste (systemctl list-units --type=service --state=running) und prüfen Sie, ob systemctl --failed leer ist. Notieren Sie zu jedem Dienst, was er tut und ob Sie ihn benötigen. Finden Sie für einen Dienst, den Sie nicht kannten, heraus, was er ist (systemctl status, man). Setzen Sie danach für einen wichtigen Dienst Restart=on-failure in einem Drop-in und prüfen Sie mit systemctl cat, dass die Einstellung vorhanden ist.

Aufgabe O6.1: Ihre Dienste im Überblick

Diese Aufgabe machen Sie selbst; niemand prüft sie nach. Haken Sie ab, was Sie erledigt haben, und markieren Sie die Aufgabe als erledigt.




Ihre Haken und Notizen bleiben nur in diesem Browser; wir senden sie nirgendwohin. Sind Sie angemeldet, speichern wir in Meine Kurse nur, dass Sie die Aufgabe erledigt haben.

Weiterführende Informationen

Einen Moment bitte…

Richten Sie Ihre Domains ein

Legen Sie für jede Domain die Nameserver, die Verknüpfung mit Ihrem Hosting und den künftigen Inhaber fest.

Ihre Domains werden geladen…