So halten Sie den Watchdog-Timer während des Neustarts / Herunterfahrens am Laufen

9

Bei meinen bisherigen Recherchen habe ich festgestellt, dass es zwei Ansätze gibt, um einen Watchdog-Timer für Himbeeren zu aktivieren: Verwenden von systemd oder Installieren von Watchdog. Hier wird alles gut erklärt: https://www.raspberrypi.org/forums/viewtopic.php?f=29&t=147501#

Und ich habe es geschafft, es in beide Richtungen zum Laufen zu bringen, aber nicht beim Neustart / Herunterfahren. Ich habe eine Gabelbombe verwendet, um sie zu testen, und sie reagiert darauf, wenn ich jedoch versuche:

sudo poweroff

Es bleibt einfach unten. Ich denke also, gibt es eine Möglichkeit, den Watchdog zu zwingen, während des Neustarts / Herunterfahrens weiterzulaufen, damit er nach einigen Sekunden zurückgesetzt wird, wenn er nicht richtig startet?

Die meisten Ansätze starten Watchdog während des Startvorgangs, aber was ist, wenn Sie es ständig ausführen müssen? Meine Himbeere hat einmal beim Neustart angehalten und ich musste sie manuell ausstecken / einstecken, damit sie funktioniert.


AKTUALISIEREN:

Einige Dinge sind mir jetzt viel klarer. Es gibt 3 Dinge zu beachten:

  1. Watchdog-Timer
  2. Watchdog-Daemon
  3. Watchdog-Service-Daemon

Watchdog-Timer: Ein Register, das einen Reset auslöst, wenn es überläuft. Jeder RPI-Zyklus, den es erhöht, muss regelmäßig gelöscht (gekickt) werden, um ein Zurücksetzen zu vermeiden

Um es beim Booten auszuführen, fügen Sie Folgendes zu /boot/config.txt hinzu :

dtparam=watchdog=on

Watchdog-Daemon: Ein Prozess, der dafür verantwortlich ist, den Watchdog-Timer regelmäßig zu löschen (zu treten)

Es installieren:

sudo modprobe bcm2835_wdt echo "bcm2835_wdt" | sudo tee -a /etc/modules sudo apt-get install watchdog sudo update-rc.d watchdog defaults

Konfigurieren Sie /etc/watchdog.conf :

watchdog-device = /dev/watchdog watchdog-timeout = 14 realtime = yes priority = 1 max-load-1 = 24

Konfigurieren Sie / etc / default / watchdog :

watchdog_module="bcm2835_wdt"

Um es zu konfigurieren, fügen Sie Folgendes zu /etc/modprobe.d/watchdog.conf hinzu :

options bcm2835_wdt nowayout=1 heartbeat=10

Referenz: http://vk5tu.livejournal.com/35721.html

Der Heartbeat-Parameter für das Kernelmodul ist die maximale Lücke zwischen den Heartbeats, die das Gerät vor dem Neustart der Hardware sieht

Der Parameter nowayout bestimmt, was passiert, wenn das Gerät / dev / watchdog geschlossen wird: Wird immer noch ein Herzschlag erwartet oder nicht? Der Wert 1 gibt an, dass der Countdown für einen Neustart weiterhin ausgeführt wird. Wenn das Gerät nicht erneut geöffnet und ein Heartbeat geschrieben wird, wird der Computer neu gestartet.

Aktivieren Sie es (Wenn dies nicht funktioniert, kümmern Sie sich zuerst um watchdog.service und versuchen Sie es erneut):

sudo systemctl enable watchdog

Überwachen Sie es:

sudo systemctl status watchdog

Watchdog-Service-Daemon: Wird aktiviert, wenn der Watchdog-Daemon ausfällt / stoppt. In der Regel wird ein Keepalive- Daemon ausgeführt, der den Watchdog regelmäßig startet

Konfigurieren Sie /lib/systemd/system/watchdog.service :

# OnFailure=wd_keepalive.service- Wenn Sie dies auskommentieren, wird der Keepalive- Daemon deaktiviert. Sobald der Watchdog-Daemon ausfällt / stoppt, kann der Watchdog-Timer nicht mehr RPI neu starten

[Install] WantedBy=multi-user.target - Bug-Fix


Schließlich:

Starten Sie das RPI neu. Nach dem Neustart von Himbeere sollte alles starten (Watchdog-Timer und Watchdog-Daemon). Um dies zu überprüfen, verwenden Sie:

cat /var/log/syslog | grep watchdog

Erwartete Ausgabe:

Jun 14 12:09:08 raspberrypi systemd[1]: Starting watchdog daemon... Jun 14 12:09:08 raspberrypi watchdog[813]: starting daemon (5.14): Jun 14 12:09:08 raspberrypi watchdog[813]: int=1s realtime=yes sync=no soft=no mla=24 mem=0 Jun 14 12:09:08 raspberrypi watchdog[813]: ping: no machine to check Jun 14 12:09:08 raspberrypi watchdog[813]: file: no file to check Jun 14 12:09:08 raspberrypi watchdog[813]: pidfile: no server process to check Jun 14 12:09:08 raspberrypi watchdog[813]: interface: no interface to check Jun 14 12:09:08 raspberrypi watchdog[813]: temperature: no sensors to check Jun 14 12:09:08 raspberrypi watchdog[813]: test=none(0) repair=none(0) alive=/dev/watchdog heartbeat=none to=root no_act=no force=no Jun 14 12:09:08 raspberrypi watchdog[813]: watchdog now set to 14 seconds Jun 14 12:09:08 raspberrypi watchdog[813]: hardware watchdog identity: Broadcom BCM2835 Watchdog timer Jun 14 12:09:08 raspberrypi systemd[1]: Started watchdog daemon.

Und:

ps aux|grep watchdog

Erwartete Ausgabe:

root 813 0.0 0.2 1888 1760 ? SLs 12:09 0:00 /usr/sbin/watchdog pi 900 0.0 0.2 4752 1992 pts/0 S+ 12:10 0:00 grep --color=auto watchdog


PRÜFUNG :

Töte den Watchdog-Daemon und starte:

ps aux|grep watchdog

Siehe Prozess-ID und töte sie:

root 812 0.0 0.2 1888 1760 ? SLs 12:16 0:00 /usr/sbin/watchdog pi 898 0.0 0.2 4752 1992 pts/0 S+ 12:16 0:00 grep --color=auto watchdog

sudo kill -9 812

Klassischer Gabelbombentest, ausführen:

: (){ :|:& };:

Führen Sie Folgendes aus, um zu testen, ob die Himbeere zurückgesetzt wird, wenn der Neustart fehlschlägt:

sudo poweroff - Mit diesem hatte ich einige Probleme

Himbeere sollte nach ca. 15s neu starten.

Duje
quelle

Antworten:

5

sudo poweroffbedeutet herunterfahren und ausbleiben. Der Wachhund fängt dies nicht ab und sollte es auch nicht abfangen. Das aufgetretene Verhalten ist korrekt und Sie sollten nicht erwarten, dass der Watchdog ein ausgeschaltetes System neu startet.

Ich glaube nicht, dass Sie das tun wollen. Wenn Sie den pi neu starten möchten. Sie sollten sudo rebootstattdessen den Befehl verwenden. Und in diesem Fall rebootsollte der Watchdog die Kontrolle übernehmen , wenn während der Shutdown-Startsequenz , die ausgelöst wird, etwas hängt .

Nickcrabtree
quelle
4

Ich habe nicht alle Scherze durchgearbeitet, die Sie verlinkt haben, aber der Autor scheint den Wachhund nicht zu verstehen.

Es gibt einen BCM-Hardware-Watchdog. Wenn Sie den Hardware-Watchdog starten möchten, schließen Sie dtparam=watchdog=onin ein/boot/config.txt

An und für sich tut dies wenig, obwohl es das System neu starten sollte, wenn es nicht regelmäßig "getreten" wird. Sie können Code schreiben, der geöffnet wird /dev/watchdog, um ihn zu starten.

Es gibt auch eine, watchdog daemondie Sie konfigurieren können, um den Watchdog zu aktivieren. Sie sollten in der Lage sein, mit zu beginnensudo systemctl enable watchdog

HINWEIS Der unten erwähnte Fehler war in Jessie und wurde in Stretch behoben.
Leider ist ein Fehler im systemd-Skript bekannt, der leicht behoben werden kann. Siehe http://unix.stackexchange.com/questions/346224/problem-with-systemd-starting-watchdog

Milliways
quelle
Vielen Dank für Ihre Antwort. Ich habe meinem ursprünglichen Beitrag ein Update hinzugefügt, um meinen Fortschritt anzuzeigen. Ich habe jedoch immer noch Probleme damit, das WDT dazu zu bringen, das RPI beim Ausführen neu zu starten sudo poweroff. Manchmal funktioniert es, manchmal nicht: S
Duje
1
Leider scheinen Sie viele verschiedene Ideen gemischt zu haben. Ich behaupte nicht, ein Experte für Watchdog zu sein, sondern zu sehen, ob es läuft systemctl status watchdog.service. Das Töten führt watchdog NICHT zu einem Neustart, da der watchdog.serviceStart wd_keepalive.servicebeim Schließen beginnt , was, wie der Name schon sagt, einen Neustart verhindert.
Milliways
Nicht, wenn Sie wd_keepalive.service deaktivieren. So: "Configure /lib/systemd/system/watchdog.service: # OnFailure=wd_keepalive.service- Wenn Sie dies auskommentieren , wird der Keepalive-Daemon deaktiviert. Sobald der Watchdog-Daemon ausfällt / stoppt, kann der Watchdog-Timer den RPI nicht mehr neu starten."
Duje
2

Power ist ein Systemdienst / Daemon in pi und wird von einem IC analysiert, der direkt an den Broadcom-IC angeschlossen ist. Der Betriebsworkflow kann unter Bezugnahme auf Systemdateien geändert werden. Soweit ich Ihnen sagen kann, versuchen Sie jedoch, Periperhials in benutzerdefinierten Leistungsregelungsszenarien innerhalb des Konzepts von Interrupts und Watchdog-Timern aufzurufen. Sie können einen Teil dieses Verhaltens ändern, indem Sie den Regel-IC neu drehen und eine Bare-Metal-Programmierung vor dem Start durchführen. Schauen Sie sich diese an und zögern Sie nicht, mich zu kontaktieren, wenn Sie etwas im Sinn haben. Lesen Sie den Befehlssatz für die Referenzlinie der ARM Corp.-Baugruppe sowie die Architekturdokumentation. Es ist im Web.

http://infocenter.arm.com/help/topic/com.arm.doc.dui0489f/DUI0489F_arm_assembler_reference.pdf

https://www.arm.com/files/pdf/CortexM3_programming_for_ARM7_developers.pdf

Übrigens, sagen Sie "Hallo" zu Ihrem Professor ...

Yigit Turgut
quelle