Raspberry Pi: Den eingebauten Hardware-Watchdog zur Überwachung nutzen

rasp_logoWer seinen Raspberry Pi rund um die Uhr wichtige Aufgaben erledigen lässt, ist an einem zuverlässig laufenden System interessiert. Der Hardware-Watchdog kann das sicherstellen, selbst wenn es mal irgendwo hapert.

Eine der Besonderheiten des Raspberry Pi – aber auch ähnlicher Microcomputer wie etwa dem BeagleBone Black – ist ein Hardware-Watchdog (dtsch. „Wachhund“). Dieser überwacht das System permanent und kann es neu starten, wenn es aufgrund einer Störung nicht mehr ordnungsgemäß läuft. Das ergibt nur Sinn, wenn der Watchdog unabhängig vom eigentlichen System läuft. Denn wenn der Prozessor steht, würde auch ein in Software ausgeführter Watchdog stehen bleiben und wäre somit völlig sinnlos. Deshalb ist der Watchdog des Raspberry Pi in Hardware realisiert. Selbst wenn sonst alles steht, führt diese unabhängige Hardware immer noch ihre Aufgabe aus.

So funktioniert der Watchdog

Der Hardware-Watchdog ist als eigenes Device (Gerät) implementiert, das man unter /dev/watchdog finden kann. Wurde dieses Device einmalig beschrieben, möchte es von da an alle 15 Sekunden erneut beschrieben werden. Entsteht eine Pause von mehr als 15 Sekunden zwischen zwei Schreibvorgängen, führt der Watchdog einen Hardwarereset durch. Das regelmäßige Beschreiben von /dev/watchdog kann ein Watchdog-Daemon übernehmen. Der kann verschiedene Parameter des Systems überwachen, wie z. B. die Systemlast, den verfügbaren freien Speicher, die Temperatur oder die Erreichbarkeit des Netzwerks. Er beschreibt das Watchdog-Gerät regelmäßig, solange die vorgegebene Bedingung nicht zutrifft. Wird die Bedingung erreicht (etwa weil die Systemlast den festgelegten Wert auf Dauer überschreitet), unterbleibt der Schreibvorgang auf das Watchdog-Gerät. Ist dies länger als 15 Sekunden der Fall, erfolgt ein Reset.

Eine bestimmte Funktion des Rechners überwachen

Nun sind allgemein Parameter wie Speicher oder Prozessorlast nur bedingt hilfreich, denn der Rechner soll ja eine ganz bestimmte Aufgabe erfüllen. Und was nützen freier Speicher und geringe Systemlast, wenn der wesentliche Dienst bzw. Prozess sich aufgrund eines Fehlers längst verabschiedet hat? Hierzu ist eine andere Option des Watchdog-Daemons hilfreich, nämlich das Überwachen einer (oder auch mehrerer) Datei(en). Der Watchdog-Dienst prüft dann regelmäßig, ob es Zugriffe auf eine bestimmte Datei gegeben hat. Diese müssen übrigens nicht innerhalb eines 15-Sekunden-Intervalls erfolgen, sondern können auch durchaus länger auseinanderliegen. Der Watchdog-Daemon kann also beispielsweise regelmäßig überprüfen, ob der letzte Zugriff auf eine Datei nicht mehr als 10 Minuten zurückliegt. Andernfalls löst er über das Watchdog-Device einen Reset aus. Nun muss man nur noch eine Datei finden, die von dem zu überwachenden Dienst garantiert regelmäßig beschrieben wird, wie etwa eine Log-Datei. Vielleicht kann man den Dienst sogar entsprechend konfigurieren oder ergänzen, so dass regelmäßige Schreibvorgänge auf eine festgelegte Datei erfolgen.

[raspberrypi]

Den Watchdog und den Watchdog-Daemon aktivieren

Wie funktioniert das nun konkret. Der Hardware-Watchdog ist zwar im Raspberry Pi vorhanden, wird aber standardmäßig nicht verwendet. Deshalb muss er zunächst aktiviert werden:

$ sudo modprobe bcm2708_wdog
$ echo „bcm2708_wdog“ | sudo tee -a /etc/modules

Update (siehe hierzu auch den Beitrag von Ralf in den Kommentaren):
Ich habe gestern festgestellt dass es mit dem aktuellen Kernel im Raspbian kein Kernelmodul modprobe bcm2708_wdog mehr gibt. Man muss jetzt das Kernelmodul modprobe bcm2835_wdt verwenden.
Also „sudo modprobe bcm2835_wdt“
Man muss nix mehr in /etc/modules eintragen. Man kann dann direkt schon auf /dev/watchdog schreiben.

Damit ist der Hardware-Watchdog aktiviert und einsatzbereit. Man kann ihn zur Kontrolle mit ls -al /dev/watchdog auflisten. Wer testen will, ob der Watchdog auch funktioniert, gibt sudo cat > /dev/watchdog ein und drückt dann einmal [Eingabe]. Nun braucht man nur noch 15 Sekunden warten, ob der Neustart des Gerätes tatsächlich erfolgt.
Der Watchdog-Daemon muss zunächst installiert werden:

$ sudo apt-get install watchdog

Das kann ein wenig dauern. Anschließend kann die Konfigurationsdatei in /etc/watchdog.conf geöffnet werden:

$ sudo nano /etc/watchdog.conf

Diese Datei enthält bereits eine ganze von Einstellungen, die aber (fast) alle auskommentiert (#) sind. Zusätzlich sollten Sie diese beiden vorhandenen Zeilen aktivieren, indem Sie das # am Anfang entfernen:

watchdog-device        = /dev/watchdog
max-load-1             = 24

Nun können Sie die Bedingung definieren, bei welcher der Watchdog-Daemon für einen Reset sorgen soll. Wenn Sie dies anhand der Zugriffe auf eine Datei festmachen möchten, verwenden Sie dafür folgende Zeilen:

file = /<meine_datei>
change = 1000

Bei file geben Sie den vollständigen Pfad zu der Datei an, die vom zu überwachenden Dienst regelmäßig beschrieben wird. change legt fest, wieviele Sekunde nach dem letzten Zugriff der Watchdog einen Reset ausführen soll. Wird eine Datei beispielsweise spätestens alle 15 Minuten beschrieben (= 900 Sekunden), dann würde change = 1000 mit einem kleinen Zeitpuffer 16:40 Minuten nach dem letzten Zugriff einen Reset ausführen. Die change-Angabe bezieht sich dabei immer auf die vorangehende file-Angabe. Sie können somit auch mehrere file-change-Paare in der Konfigurationsdatei angeben, um verschiedene Dateien mit unterschiedlichen Intervallen zu überwachen. Allerdings löst der Daemon aus, sowie auch nur eine der angegebenen Dateien den Zugriffsintervall nicht einhält. Er kann nicht so konfiguriert werden, dass er erst auslöst, wenn alle angegebenen Dateien veraltet sind.

Nun brauchen Sie den Watchdog-Daemon nur noch mit

sudo /etc/init.d/watchdog start

starten. Dies muss aber nur einmalig unmittelbar nach dem Installieren des Watchdog erfolgen. In Zukunft wird er bei einem Neustart des Rechners automatisch aktiviert. Andere Variante für die Überwachung durch den Watchdog Daemon finden Sie in der manpage.

Hinweis: Um die Watchdog-Funktion später wieder zu deaktivieren, reicht es, den Watchdog-Daemon zu deaktivieren bzw. notfalls zu deinstallieren. Dann erfolgt nach einem Neustart kein initialer Schreibzugriff auf das Watchdog-Gerät mehr, so dass der Hardware-Watchdog gar nicht erst in Gang gesetzt wird.

19 Antworten

  1. Neil Young sagt:

    Auf meinem PI 4B gibt es immer

    sudo cat > /dev/watchdog
    bash: /dev/watchdog: Permission denied

  2. Dardy sagt:

    Hallo zusammen,

    ich möchte eine Datei dauerhaft bewachen und dafür den Hardware-Watchdog verwenden. Wie im Artikel beschrieben, habe ich alle Schritte so weit durchgeführt. Ich möchte folgende Datei bewachen:

    file = /home/pi/Desktop/beispiel.py
    change = 120

    Problematik: Egal welche Zeit ich bei „change“ definiere und ob die Datei beschrieben wird oder nicht, der Watchdog rebootet das System nach ca. 60 Sekunden. Eigentlich möchte ich Ja, dass erst nach 120 Sekunden das System rebootet wird, falls die Datei nicht mehr beschrieben wurde.

    Ich weiß der Artikel ist schon etwas älter, aber über hilfreiche Kommentare würde ich mich sehr freuen.

  3. Ralf sagt:

    Hallo,

    wie sieht das Ganze jetzt beim Pi 4 aus? Hat der noch einen Hardware-Watchdog?

  4. peets sagt:

    Danke für den aussergewöhnlich klaren und gut verständlichen Artikel.

    Bei Verwendung einer Datei zum ‚Füttern‘ des WD aus einer Anwendung gibt es Probleme mit der SD-Karte, vor allem im Langzeitbetrieb. Da jedesmal ein Block in den FLASH Speicher der SD geschrieben werden muss kann die Zahl der maximal möglichen Schreibzyklen überschritten werden was zu einem Defekt der Karte führt. Abhilfe wäre das Einrichten einer RAM-Partition in die dann diese Datei gelegt wird.

  5. stef sagt:

    Hallo,
    Weiß jemand ob man den watchdog u.a. auch zu Spannungsversorgungsüberwachung nehmen könnte, praktisch soetwas wie ein interrupt auslösen damit er im letzten Zug noch seine Daten abspeichert? Akku wäre vorhanden um die Versorgung wärhend des steps zu gewährleisten.

  6. Wolfram sagt:

    @Ralf:
    Danke für den wichtigen Hinweis! Ich werde im Artikel darauf verweisen.

  7. Ralf sagt:

    Ich habe gestern festgestellt dass es mit dem aktuellen Kernel im Raspbian kein Kernelmodul modprobe bcm2708_wdog mehr gibt.

    Man muss jetzt das Kernelmodul modprobe bcm2835_wdt verwenden.

    Also „sudo modprobe bcm2835_wdt“
    Man muss nix mehr in /etc/modules eintragen. Man kann dann direkt schon auf /dev/watchdog schreiben.

    Ich habs getestet, es funktioniert. Getestet hat ich es aber nicht mit der hier beschriebenen Software sondern mit einem umgebauten Beispielprogramm in C, das ich mal im Netzt gefunden hab.

  8. Wolfram sagt:

    @Ralf:
    Bislang habe ich es nicht probiert, aber ich gehe davon aus. Die Raspberry Pi-Modelle sind bislang alle untereinander abwärtskompatibel. Die neueren haben also zusätzliche Funktionen oder Leistung, aber davon abgesehen sind sie identisch.

  9. Ralf sagt:

    Hat der neue Raspberry Pi 3 auch diesen Hardwarewatchdog?

    Sorry, falls die Frage blöd ist.

  10. Wolfram sagt:

    @Ralf:
    60 Sekunden ist die Voreinstellung des Watchdog-Daemon bei Linux. Der Hardware-Watchdog unterstützt in der Tat maximal knapp 16 Sekunden.
    Verwendet man den Daemon ist das unproblematisch, weil die zu hohe Standardvorgabe automatisch auf einen passenden Wert reduziert, wenn der Treiber nicht mehr hergibt.
    Will man den Hardware-Watchdog direkt beschreiben, muss man allerdings die kürzere Vorgabe beachten, das ist korrekt.
    Danke für den Hinweis, wird im Artikel korrigiert.

  11. Ralf sagt:

    Hallo,

    nochmal kurz zum Watchdog, ich hab mich jetzt ziemlich lange damit rumgeärgert und experimentiert und hab jetzt den Daemon komplett runter geworfen und ein eigenes Script eingesetzt, basierend auf dem Testcode auf dieser Seite http://binerry.de/post/28263824530/raspberry-pi-watchdog-timer

    Interessant und in den meisten Anleitungen nicht zu finden ist die Info, dass man den Watchdog durch Beschreiben mit „V“ ausschalten kann. Außerdem wird in den meisten Anleitungen immer fälschlicher Weise behauptet der Watchdog löse nach 60 Sekunden aus, das stimmt aber nicht, er löst nach 16 Sekunden aus. Diese Zeit kann man kürzer einstellen, aber leider nicht länger.

  12. Wolfram sagt:

    @Ralf:
    Hardwaremäßig ist exakt der gleiche Watchdog vorhanden. Sollte sich auch genauso nutzen lassen.

  13. Ralf sagt:

    Kann es sein dass der Raspberry PI 2 keinen Hardware-Watchdog mehr hat?

    Ich diskutiere gerade darüber in einer Facebookgruppe, weil mein PI mit Watchdog ständig abstürzt. Laut Aussage eines Users hat der PI 2 keinen Hardware-Watchdog.

  14. Wolfram sagt:

    @thekk:
    Bislang wurde der Watchdog bei der Installation per apt-get automatisch in die Runlevel eingebunden. Hat sich das bei der neuen Distribution geändert (habe es damit noch nicht getestet)?

  15. thekk sagt:

    In dem Artikel wurde „sudo update-rc.d watchdog defaults“ vergessen.
    Ohne wird das nix mit dem autostart nach shutdown.

  16. underwood sagt:

    Hallo,

    der Pi Watchdog hat einen maximalen Timeout von 15 und Voreinstellung ist 10s! Daher funktioniert das mit den 60s nicht. Außerdem sollte man den BCM2708 erst zusammen mit dem watchdog starten und zudem noch verzögert zum Systemstart.

    http://www.raspberrypi.org/forums/viewtopic.php?t=13634

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Schließen