Haengenden Raspberry Pi automatisch neu starten — eingebauter Hardware-Watchdog
Ein headless Pi friert ein und ist nur noch per Steckdose erreichbar? Der eingebaute BCM-Hardware-Watchdog rebootet ihn nach einem echten Aufhaenger automatisch — ganz ohne externe Schaltung.
Headless-Pis im Schrank, am Mast oder im Serverrack haben ein Problem: Wenn der Kernel hart einfriert, hilft nur noch Strom ziehen. Der Broadcom-SoC bringt aber einen Hardware-Watchdog-Timer mit, der den Pi nach einem echten Aufhaenger selbststaendig neu startet. Dieses Tutorial richtet sich an Profis, die headless betriebene Pis stabil halten wollen — mit dem eingebauten Watchdog plus systemd, also ohne externe Relais oder Reset-Schaltung.
Wie der Watchdog funktioniert
- Der SoC (BCM2835 und Nachfolger) enthaelt einen Countdown-Timer. Laeuft er auf 0, loest die Hardware einen harten Reset aus — unabhaengig davon, ob die CPU noch reagiert.
- Solange das System lebt, schreibt ein Daemon regelmaessig auf
/dev/watchdog0und setzt den Zaehler zurueck („Kicken“). Bleibt das Kicken aus, rebootet der Pi. - Das Kernelmodul heisst
bcm2835_wdt. Der maximale Timeout betraegt 15 Sekunden — das ist die Hardware-Grenze des SoC, hoehere Werte sind nicht moeglich. - Du brauchst nur eine Software, die den Watchdog fuettert: entweder systemd (hier gezeigt) oder das separate
watchdog-Paket. Niemals beide gleichzeitig — sie streiten sich um/dev/watchdog0.
Schritt 1: Watchdog im Boot-Config aktivieren
Per Default ist das Watchdog-Device nicht angelegt. Aktiviere es ueber den Device-Tree-Parameter.
- Config-Datei oeffnen. Auf Raspberry Pi OS Bookworm/Trixie liegt sie unter
/boot/firmware/config.txt, auf aelteren Systemen unter/boot/config.txt:sudo nano /boot/firmware/config.txt - Folgende Zeile ans Ende setzen:
dtparam=watchdog=on - Neu starten, damit der Device-Tree neu geladen wird:
sudo reboot
Schritt 2: Device und Modul pruefen
Nach dem Reboot verifizierst du, dass Hardware und Kernel zusammenspielen.
- Device-Datei vorhanden?
Es solltenls -l /dev/watchdog*/dev/watchdogund/dev/watchdog0erscheinen. - Kernel-Log pruefen:
Erwartete Meldung:dmesg | grep -i watchdogbcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer. - Status mit
wdctl(aus dem Paketutil-linux, meist schon installiert):
Ausgabe zeigt u.a.wdctlIdentity: Broadcom BCM2835 Watchdog timerundTimeout: 15 seconds.
Schritt 3: systemd als Watchdog-Daemon einspannen
systemd kann den Hardware-Watchdog direkt fuettern und zusaetzlich seine eigene Liveness ueberwachen — kein zusaetzliches Paket noetig.
- Konfiguration oeffnen:
sudo nano /etc/systemd/system.conf - Diese beiden Zeilen setzen (vorhandene, auskommentierte Eintraege entkommentieren und anpassen):
Wichtig:RuntimeWatchdogSec=14 ShutdownWatchdogSec=2minRuntimeWatchdogSecmuss ≤ 15 bleiben, sonst akzeptiert die Hardware den Wert nicht und der Watchdog laeuft im schlimmsten Fall gar nicht.14ist ein robuster Wert; systemd kickt den Timer dann etwa alle 7 Sekunden. ShutdownWatchdogSechaelt den Watchdog beim Reboot/Shutdown aktiv — bleibt der Pi beim Herunterfahren haengen, erzwingt der Timer trotzdem den Neustart.- Aenderung ohne Reboot uebernehmen:
sudo systemctl daemon-reexec - Pruefen, dass systemd den Watchdog nutzt:
systemctl show | grep -i watchdogRuntimeWatchdogUSecsollte jetzt einen Wert ungleich 0 zeigen.
Schritt 4: Den Reboot scharf testen
Erst der Test beweist, dass der Watchdog wirklich greift. Simuliere einen echten Kernel-Hang ueber den Magic-SysRq-Trigger.
- SysRq freischalten und Crash ausloesen (als root):
echo 1 | sudo tee /proc/sys/kernel/sysrq echo c | sudo tee /proc/sysrq-trigger - Der Kernel paniced, die SSH-Verbindung bricht ab — und der Pi rebootet nach Ablauf des Timeouts (max. ~15 s) von selbst.
Warnung: echo c > /proc/sysrq-trigger erzeugt einen sofortigen Kernel-Crash. Alle nicht geschriebenen Daten gehen verloren und Dateisysteme werden unsauber ausgehaengt — fuehre den Test nur auf einem System ohne laufende Schreiblast und niemals im Produktivbetrieb aus. Profi-Tipp: Der Watchdog rettet nur vor echten Aufhaengern (Kernel-Hang, harter Lockup). Eine vollgelaufene Disk, ein abgestuerzter Dienst oder ein toter Netzwerk-Stack bei laufendem Kernel werden nicht erkannt — dafuer brauchst du das separate watchdog-Paket mit Ping-/Last-/Prozess-Checks (aber dann systemd-Watchdog deaktivieren, sonst Konflikt) oder zusaetzliche systemd-Service-Watchdogs.