Watchdog-Timer unter Linux: Hardware- und Software-Watchdogs richtig einsetzen
AI generated
$
/etc
Linux
Watchdog-Timer unter Linux
Hardware- und Software-Watchdogs richtig einsetzen

Ein Server, der nachts um drei Uhr hängt, meldet sich nicht per Alarm, er meldet sich gar nicht mehr. Ein Watchdog-Timer ist die letzte Verteidigungslinie für genau diesen Fall: Ein unabhängiger Timer, der einen automatischen Neustart auslöst, sobald das System aufhört, ihn regelmäßig zu bestätigen. Für unbeaufsichtigte Magento-Hosting-Server, bei denen niemand um drei Uhr nachts eingreifen kann, ist ein korrekt konfigurierter Watchdog der Unterschied zwischen einem kurzen Reboot und stundenlangem Ausfall bis zum nächsten Arbeitstag.

9 Min. Lesezeit Linux Watchdog Systemd

1. Was ein Watchdog-Timer eigentlich macht

Das Grundprinzip eines Watchdog-Timers ist bewusst simpel gehalten: Ein Timer zählt kontinuierlich herunter, und eine überwachende Instanz, meist der Kernel oder ein Daemon im Userspace, muss den Timer in regelmäßigen Abständen zurücksetzen, umgangssprachlich als Füttern bezeichnet. Bleibt diese Bestätigung aus, weil der überwachte Prozess hängt, abgestürzt ist oder in einer Endlosschleife feststeckt, löst der Timer beim Erreichen von Null automatisch einen harten Reset des Systems aus.

Diese Einfachheit ist zugleich die Stärke des Konzepts: Ein Watchdog trifft keine komplexe Diagnose darüber, warum ein System nicht reagiert, er reagiert lediglich auf das Ausbleiben der erwarteten Bestätigung. Genau dieser reduzierte Funktionsumfang macht ihn robust genug, um selbst dann noch zu funktionieren, wenn praktisch alle anderen Komponenten des Systems bereits versagt haben.

2. Der Hardware-Watchdog unter /dev/watchdog

Server-Hauptplatinen bringen häufig einen eigenen Hardware-Watchdog-Chip mit, etwa als Teil des iTCO-Chipsatzes bei Intel-Plattformen oder als Bestandteil eines IPMI-Controllers bei dedizierten Server-Boards. Der Kernel-Treiber für diesen Chip stellt das Gerät /dev/watchdog bereit, über das ein Userspace-Prozess den Timer per write()-Aufruf regelmäßig zurücksetzt.

Der entscheidende Vorteil eines Hardware-Watchdogs ist seine Unabhängigkeit vom eigentlichen Betriebssystem: Selbst wenn der Kernel vollständig eingefroren ist und keinerlei Code mehr ausführt, läuft der Timer auf der Hauptplatine unabhängig weiter und löst nach Ablauf einen echten Hardware-Reset aus, unabhängig davon, ob das Betriebssystem überhaupt noch in der Lage wäre, selbst einen Neustart einzuleiten.


# Vorhandenen Hardware Watchdog Treiber identifizieren
ls -la /dev/watchdog*
cat /sys/class/watchdog/watchdog0/identity

# Aktuelles Timeout des Hardware Watchdogs auslesen
cat /sys/class/watchdog/watchdog0/timeout

3. Software-Watchdog gegenüber Hardware-Watchdog

Fehlt dedizierte Watchdog-Hardware, etwa in virtuellen Maschinen ohne durchgereichten Chipsatz, springt das Kernel-Modul softdog ein und emuliert einen Watchdog rein in Software. Da dieser Timer selbst Teil des Kernels ist, schützt er zuverlässig gegen hängende Userspace-Prozesse, aber nicht gegen einen tatsächlichen Kernel-Panic oder eine echte Kernel-Ebenen-Blockade, weil der emulierte Timer in diesem Fall selbst nicht mehr laufen kann.

In Cloud-Umgebungen mit virtuellen Maschinen ist die Situation gemischt: Manche Hypervisoren, etwa KVM mit dem i6300esb-Emulator, reichen einen virtuellen Hardware-Watchdog an den Gast durch, der sich fast identisch zu echter Hardware verhält. Andere Cloud-Provider bieten stattdessen eigene, außerhalb der VM laufende Health-Checks an, die eine ähnliche Rolle übernehmen, aber anders konfiguriert werden müssen als ein klassischer Linux-Watchdog.

4. Der systemd-integrierte Watchdog

systemd selbst kann als Watchdog-Client fungieren und übernimmt dabei das regelmäßige Füttern von /dev/watchdog, sobald in /etc/systemd/system.conf die Option RuntimeWatchdogSec gesetzt ist. Damit entfällt die Notwendigkeit, einen separaten klassischen watchdog-Daemon zu betreiben, weil PID 1 diese Aufgabe ohnehin bereits zentral übernimmt.

Zusätzlich kennt systemd einen zweiten, unabhängigen Watchdog-Mechanismus namens ShutdownWatchdogSec, der speziell den Herunterfahrvorgang selbst absichert. Bleibt ein Server während des Shutdowns hängen, etwa wegen eines Dienstes, der sich nicht sauber beenden lässt, löst dieser separate Timer nach Ablauf einen erzwungenen Reset aus, statt den Server unbegrenzt im Shutdown-Zustand verharren zu lassen.


# /etc/systemd/system.conf
[Manager]
RuntimeWatchdogSec=30s
ShutdownWatchdogSec=10min

5. WatchdogSec in einzelnen systemd-Units konfigurieren

Neben dem systemweiten Hardware-Watchdog unterstützt systemd auch einen anwendungsspezifischen Watchdog-Mechanismus über die Direktive WatchdogSec in einer einzelnen Service-Unit. Der überwachte Dienst muss dafür über die sd_notify Schnittstelle regelmäßig WATCHDOG=1 an systemd melden, üblicherweise über die libsystemd Bibliothek oder ein entsprechendes Sprach-Binding.

Bleibt diese Bestätigung länger als die konfigurierte Zeitspanne aus, betrachtet systemd den Dienst als hängend und wendet die in WatchdogSignal und FailureAction konfigurierte Reaktion an, üblicherweise einen Neustart des Dienstes über die reguläre Restart= Logik. Dieser Mechanismus fängt damit auch Anwendungs-Hänger ab, die keinen Kernel-Watchdog auslösen würden, weil der Prozess selbst technisch noch läuft, aber intern nicht mehr auf Anfragen reagiert.


# /etc/systemd/system/myapp.service
[Service]
ExecStart=/usr/local/bin/myapp
WatchdogSec=15s
Restart=on-watchdog

6. Der klassische watchdog-Daemon und /etc/watchdog.conf

Vor der breiten Verfügbarkeit des systemd-integrierten Watchdogs übernahm das eigenständige Paket watchdog diese Aufgabe, konfiguriert über /etc/watchdog.conf. Dieser Daemon bietet zusätzlich zur reinen Timer-Bestätigung eigene Prüfungen an, etwa Grenzwerte für Load Average, freien Arbeitsspeicher oder die Erreichbarkeit konfigurierter Testdateien, und löst bereits bei Überschreitung dieser Schwellen einen Neustart aus, unabhängig vom eigentlichen Hardware-Timeout.

Für die meisten modernen Setups mit aktuellem systemd ist der integrierte Watchdog-Mechanismus die einfachere Wahl, weil er ohne zusätzliches Paket auskommt und sich sauber mit der übrigen Unit-Konfiguration verzahnt. Der klassische Daemon bleibt vor allem dort relevant, wo sehr ältere Systeme oder spezielle, über den reinen Watchdog hinausgehende Zusatzprüfungen benötigt werden.

7. Praxisfall: Unbeaufsichtigten Server automatisch neustarten lassen

Für einen Magento-Hosting-Server ohne physische Vor-Ort-Betreuung außerhalb der Geschäftszeiten ist die Kombination aus Hardware-Watchdog und systemd-Integration die robusteste Lösung. Der Hardware-Watchdog fängt den Fall eines vollständig eingefrorenen Kernels ab, während WatchdogSec in kritischen Service-Units, etwa für PHP-FPM oder Nginx, Anwendungs-Hänger erkennt, die den Kernel selbst gar nicht betreffen.

Wichtig ist ein realistisches Timeout: Ein zu kurzes RuntimeWatchdogSec löst bei kurzen, aber harmlosen Lastspitzen unnötige Neustarts aus, während ein zu langes Timeout im Ernstfall die Ausfallzeit unnötig verlängert. Ein Startwert von 30 bis 60 Sekunden für den Hardware-Watchdog und 15 bis 30 Sekunden für kritische Anwendungs-Watchdogs hat sich in der Praxis für die meisten Webserver-Workloads bewährt.


# Watchdog Status und aktuell konfiguriertes Timeout pruefen
systemctl show -p RuntimeWatchdogUSec
wdctl /dev/watchdog

8. Watchdog-Konfiguration testen, ohne einen Produktionsausfall zu riskieren

Ein Watchdog, der nie getestet wurde, ist im Ernstfall ein unbekanntes Risiko. Auf einer separaten Testmaschine oder in einer VM lässt sich ein tatsächlicher Hänger simulieren, etwa durch einen bewusst blockierenden Kernel-Modul-Aufruf oder durch das Anhalten des systemd-Prozesses selbst mit SIGSTOP, um zu prüfen, ob der konfigurierte Neustart tatsächlich auslöst.

Für die Anwendungs-Ebene lässt sich WatchdogSec ebenso gezielt testen, indem der überwachte Dienst kurzzeitig blockiert wird, etwa durch eine künstliche Endlosschleife in einer Testversion. Erst wenn der beobachtete Neustart innerhalb der erwarteten Zeitspanne tatsächlich eintritt, sollte die Konfiguration als produktionsreif betrachtet werden, da theoretisch korrekte Konfiguration und tatsächliches Verhalten durchaus voneinander abweichen können.

9. Best Practices und typische Fallstricke

Ein häufiger Fehler ist die Annahme, ein Software-Watchdog schütze auch gegen einen echten Kernel-Panic. Das stimmt nur bedingt: Ein Kernel-Panic löst in den meisten Konfigurationen bereits eigenständig über kernel.panic in sysctl einen Neustart aus, während ein Watchdog primär gegen stille Hänger schützt, bei denen der Kernel technisch läuft, aber nicht mehr reagiert.

Cloud-Provider unterscheiden sich stark in ihrer Watchdog-Unterstützung: Manche reichen einen virtuellen Hardware-Watchdog vollständig durch, andere blockieren den Zugriff auf /dev/watchdog in ihren Standard-Images komplett. Vor dem produktiven Einsatz lohnt sich deshalb ein expliziter Test in der jeweiligen Zielumgebung, statt sich auf die Konfiguration eines On-Premises-Servers eins zu eins zu verlassen.

Watchdog-Typ Schutzumfang Läuft weiter bei Kernel-Panic Typischer Einsatz
Hardware-Watchdog (/dev/watchdog) Kernel- und Systemebene Ja, unabhängig vom Betriebssystem Physische Server, KVM mit i6300esb
Software-Watchdog (softdog) Userspace-Hänger Nein, Teil des Kernels selbst VMs ohne durchgereichten Chipsatz
systemd RuntimeWatchdogSec Kernel- und Systemebene über Hardware-Watchdog Ja, sofern Hardware vorhanden Standard-Setup mit aktuellem systemd
systemd WatchdogSec pro Unit Einzelner Anwendungsprozess Nein, rein anwendungsseitig Kritische Dienste wie PHP-FPM

Mironsoft

Server-Administration, Docker-Hosts und Performance-Tuning

Linux-Server, die niemand im Team richtig versteht?

Wir übernehmen Setup, Absicherung und Performance-Tuning von Linux-Servern und Docker-Hosts für Magento-Deployments, dokumentiert und nachvollziehbar statt gewachsen und unklar.

Server-Audit

Bestehende Server-Konfiguration auf Sicherheitslücken und Performance-Bremsen prüfen.

Docker-Host-Setup

Produktionsreife Docker-Umgebungen für Magento sauber aufsetzen und absichern.

Monitoring & Tuning

Ressourcenverbrauch messen und Systemd, Kernel und Dienste gezielt optimieren.

10. Zusammenfassung

Watchdog-Timer

Grundprinzip

Timer löst Reset aus, wenn er nicht regelmäßig bestätigt wird

Hardware-Watchdog

/dev/watchdog, unabhängig vom Betriebssystem

systemd-Integration

RuntimeWatchdogSec systemweit, WatchdogSec pro Unit

Empfohlenes Timeout

30 bis 60 Sekunden für Hardware, 15 bis 30 für Anwendungen

11. FAQ: Watchdog-Timer

1Was passiert, wenn der Watchdog nicht rechtzeitig gefüttert wird?
Sobald der Timer abläuft, ohne zurückgesetzt worden zu sein, löst der Watchdog einen harten Neustart des Systems aus. Bei einem Hardware-Watchdog geschieht das unabhängig davon, ob der Kernel selbst noch reagiert.
2Ist ein Software-Watchdog genauso zuverlässig wie ein Hardware-Watchdog?
Nein, ein Software-Watchdog wie softdog ist Teil des Kernels und schützt deshalb nicht gegen einen echten Kernel-Panic oder eine Kernel-Ebenen-Blockade, während ein Hardware-Watchdog auch in diesen Fällen unabhängig weiterläuft.
3Wie aktiviere ich den systemd-integrierten Hardware-Watchdog?
RuntimeWatchdogSec in /etc/systemd/system.conf setzen und anschließend systemd neu laden oder den Server neu starten. systemd übernimmt danach automatisch das regelmäßige Füttern von /dev/watchdog.
4Was ist der Unterschied zwischen RuntimeWatchdogSec und WatchdogSec?
RuntimeWatchdogSec konfiguriert den systemweiten Hardware-Watchdog über PID 1. WatchdogSec ist eine unitspezifische Einstellung, die einen einzelnen Dienst über sd_notify überwacht und unabhängig vom Hardware-Watchdog funktioniert.
5Kann ich einen Watchdog gefahrlos in Produktion testen?
Nicht direkt in Produktion. Ein realistischer Test gehört auf eine separate Testmaschine oder VM, wo ein echter Hänger simuliert und der tatsächliche Neustart beobachtet werden kann, ohne einen produktiven Ausfall zu riskieren.
6Unterstützen alle Cloud-Provider einen Hardware-Watchdog?
Nein, das ist sehr unterschiedlich. Manche reichen einen virtuellen Watchdog vollständig durch, andere blockieren den Zugriff auf /dev/watchdog in ihren Standard-Images, weshalb ein expliziter Test in der Zielumgebung notwendig ist.
7Wie erkennt eine Anwendung, dass sie den Watchdog bestätigen muss?
Über die sd_notify Schnittstelle, üblicherweise über die libsystemd Bibliothek. Die Anwendung sendet dabei in regelmäßigen Abständen, kürzer als das konfigurierte WatchdogSec, die Nachricht WATCHDOG=1 an systemd.
8Was passiert bei einem zu kurz gewählten Watchdog-Timeout?
Kurze, aber harmlose Lastspitzen können dann fälschlicherweise als Hänger interpretiert werden und unnötige Neustarts auslösen. Ein realistisches Timeout sollte deshalb typische Lastspitzen des jeweiligen Workloads berücksichtigen.
9Schützt der Watchdog auch vor Anwendungsfehlern, die keinen Absturz verursachen?
Ja, sofern die Anwendung WatchdogSec über sd_notify nutzt. Ein Prozess, der technisch läuft, aber intern in einer Deadlock-Situation feststeckt, wird dann erkannt, weil er die erwartete Bestätigung nicht mehr sendet.
10Brauche ich zusätzlich den klassischen watchdog-Daemon, wenn systemd bereits einen Watchdog verwaltet?
In den meisten modernen Setups nicht. Der klassische Daemon bleibt vor allem relevant, wenn Zusatzprüfungen wie Load Average oder freier Speicher benötigt werden, die über die reine Timer-Bestätigung hinausgehen.