Remote Rpi friert von Zeit zu Zeit ein. Wie wecke ich sie auf?
Antwort
Update 2019jul27hkt1406
Ich habe kürzlich mein Rpi3B + Stretch auf Rpi4B Buster aktualisiert und bin erneut dem Tutorial von @ berto gefolgt, um den Watch Dog Timer einzustellen. Ich fand, dass alles so reibungslos funktioniert wie zuvor. Mit anderen Worten, beim Upgrade auf Rpi4 müssen keine Änderungen am Tutorial von @ berto vorgenommen werden.
Das letzte Mal wusste ich nichts über den Watchdog-Timer. Ich habe also mehr als 3 Stunden gebraucht, um bei Google alles von innen nach außen zu verstehen (na ja, fast von innen nach außen). Dieses Mal weiß ich, was los ist und welche Linux-Tricks es gibt. Daher habe ich nur ein paar Minuten gebraucht, um das Tutorial von @ berto abzuschließen.
2019jun18 Updates
Nach weiteren Überlegungen kam ich zu dem Schluss, dass meine Antwort zu Ende geht. Mein Fazit ist, dass @ bertos Watchdog-Tutorial und Experimentvorschlag gut sind und seine Antwort die wahre Antwort auf die Frage des OP ist.
Ich habe sein vorgeschlagenes Experiment erfolgreich durchgeführt, die Ergebnisse durch das Forkbomb-Programm überprüft und nach mehr als 10-stündigem Googeln und Lesen die Idee des Watchdog-Timers endlich gründlich verstanden.
Früher dachte ich fälschlicherweise, ich müsse noch lernen, wie man den Timer auf 10 Sekunden oder mehr einstellt. Aber wie @berto sagt, müssen nur 10 Sekunden eingestellt werden. Ich habe auch gelesen, dass ich den Timer auf bis zu 16 Sekunden einstellen kann und der Standardwert für Linux Watchdog sogar eine Minute beträgt. Dies ist jedoch nicht kritisch.
Ich habe alle langatmigen Lesetexte in den Anhängen entfernt, um die Antwort zu verkürzen. Ich würde Neulingen empfehlen, nicht zu versuchen, alle Details von Watchdog zu verstehen, ganz zu schweigen von dem viel komplizierteren Daemon SystemD, da unser Leben kurz ist und diese Systemdinge für Laien zu kompliziert sind.
I. Ich möchte zwei Punkte hinzufügen, um meine Antwort zu beenden.
(1) Es gibt viele Gründe, warum ein RPI in ein paar Tagen (aber normalerweise nicht in Monaten) hängen bleibt. Oft ist es nicht die Schuld des Anwendungsprogramms, sondern weil die Treiber- oder Bibliotheksfunktionen zu viel Müll verursachen, z. Steckdosen erstellt, verwendet, aber nicht ordnungsgemäß entsorgt. Wenn es das Anwendungsprogramm selbst ist, das Müll macht, kann das Programm "Garbage Collection" durchführen und das Problem lösen. Es ist jedoch schwierig, Müllsockel zu entfernen, die nicht vom Anwendungsprogramm generiert werden. Daher ist hier ein Watchdog-Timer hilfreich.
(2) Andere Möglichkeiten, um zu viel Müll zu vermeiden, der Ressourcen verbraucht, sind hin und wieder ein Neustart durch Software oder Hardware. Ich denke, jeden Morgen neu zu starten und auch ein durch Software umschaltbares Netzteil zu verwenden, um das System zurückzusetzen, fügt eine weitere Schutzschicht hinzu. Und die Verwendung von nur einem RPI ist nicht sehr sicher. Wenn Sie zwei RPIs als Watchdog des jeweils anderen verwenden (z. B. URT für die Nachrichtenübermittlung), wird eine weitere Schutzschicht hinzugefügt. Eine andere Methode, die ich nicht untersucht habe, ist die Verwendung von ESP8266-WLAN-Buchsen. Ich hoffe ich kann das später versuchen.
Dies ist das Ende meiner Antwort. Prost.
2019jun17 Updates
Also habe ich die Gabelbombe ausprobiert. Das System wurde nach dem Ausführen des Programms in 15 Sekunden neu gestartet.
2019jun16 Updates
Ich fand, dass @ bertos Gabelbombenprogramm ein bisschen beängstigend für Neulinge ist. Also lerne ich Bash, um herauszufinden, was diese Gabelbombe tut. Im Grunde ist es nur eine Funktion mit dem Namen ":", die als eine Funktion definiert ist, die sich zweimal aufruft und sich so auf unbestimmte Zeit verzweigt, so schnell wie Kaninchen exponentiell wachsen, alle Ressourcen verbrauchen und Linux zum Absturz bringen.
Ich habe auch die folgende interessante Version von Forkbomb mit Unicode-Symbolen gefunden:
() {| &};
2019jun14 / 15 Updates
@thesnow schlägt einen sehr schönen mehrschichtigen Ansatz mit einem Smart Plug vor. Ich denke, der Smart Plug oder das Smart IoT-Zeug ist der richtige Weg. Ich bin jedoch ein nicht so kluger Neuling in Sachen kluges Zeug, obwohl ich gerne lernen möchte. Also werde ich mir einen Smart Plug kaufen, Nachforschungen anstellen und anschließend meine Antwort verbessern. Im Moment habe ich im folgenden Referenzabschnitt einige verwandte Lernressourcen hinzugefügt.
Ich fand den Vorschlag von @ berto, den Hardware-Watchdog-Timer von Rpi zu verwenden, ebenfalls sehr gut. Ich habe noch nie mit Watchdoog-Sachen gespielt. Also werde ich es jetzt versuchen. Die Anweisungen von @ berto sind sehr detailliert, aber für mich immer noch etwas schwierig, da ich die Bedeutung der Befehle "grep" und "dmseg" nicht sehr gut kenne. Also habe ich gegoogelt und in den folgenden Anhängen einige Lesnotizen gemacht. Dann folgte ich dem Vorschlag von @ berto und bemühte mich ein wenig, Teil 1 abzuschließen. Ich habe noch keinen Neustart durchgeführt, da ich eine Pause einlegen muss, um die Dinge zu verdauen. Wie auch immer, hier ist die Bildschirmaufnahme.
Ich habe neu gestartet und das folgende Dmesg erhalten:
Ich denke, ich gehe zu schnell und muss jetzt eine Pause einlegen, um zuerst mehr Linux-Dinge wie systemd zu studieren, bevor ich zurückkomme, um den Test auf Watchdog fortzusetzen.
/ um fortzufahren, ...
Die Antwort
Ich habe das gleiche Problem. Ich baue einen Dachgarten mit ein paar RPIs, von denen jeder mit verschiedenen drahtlosen Sensoren (BlueTooth, Wifi), Relais und Magneten verbunden ist. In der Nähe befinden sich zwei riesige Motoren, die große Wassertanks und Aufzüge steuern. Die Motoren erzeugen EMI und frieren von Zeit zu Zeit in der Nähe befindliche Elektronikgegenstände ein.
Mein Plan ist es, durch Software umschaltbare Netzteile (Power Supply Units) zum Ein- und Ausschalten eingefrorener Rpi-Geräte und anderer Geräte (Bluetooth-Geräte frieren am häufigsten ein. BlueTooth und andere kleine Geräte haben keinen Befehl zum Zurücksetzen der Software oder zum Zurücksetzen der Hardware) Pin, so ist das Ein- und Ausschalten der 5V Vcc schnell und schmutzig, aber immer noch sicher). Kurz gesagt, die Rpi beobachten sich regelmäßig gegenseitig und ihre Geräte und POR (Power On Reset) jeden eingeschlafenen Kerl.
Natürlich kann ich auch einen GPIO-Pin verwenden, um den Rpi-Hardware-On-Board-Reset-Pin auszulösen. Aber ich bin zu faul, um zusätzliche Verkabelungen vorzunehmen, und zu arm als Bastler, um mir professionelle / industrielle Non-Stop-Systemgeräte wie den Dual WatchDog-Timer von SwitchDoc Labs leisten zu können (siehe Referenz unten).
Ich modifiziere gewöhnliche Gleichstrom- DC-Netzteile (12 V bis 5 V), sodass alle Rpi- oder MCP23x17-GPIO-Pins den Spannungsregler-Chip LM2956 / LM2947 des Netzteils ein- und ausschalten können. (LM2941 kann für 1A-Stromschalter verwendet werden, LM2596 für 5V 3A-Netzteil. Der Ein / Aus-Pin ist auch mit einem Druckknopf verbunden, um manuelle Ein- / Ausschalttests durchzuführen.)
Eigentlich jeder meiner 7 Rpi3B + ist mit einem billigen DS3231-Echtzeituhrmodul verbunden, das über einen Hardware-Interrupt-Pin zum Zurücksetzen von Netzteil, Rpi oder anderen Geräten verfügt.
Wann immer möglich und praktisch, binde ich alle Reset-Pins der Geräte zusammen (entferne einige der Pull-Up-Widerstände, um den GPIO-Pin nicht zu überlasten).
Jetzt den externen DS3231 RTC weckt alle am Morgen und schaltet um Mitternacht das Licht aus, sodass alle ins Bett gehen.
1. LM2596 / LM2941 Software-zurücksetzbare Netzteil- / Stromschalter - Rpi StkEx-Diskussion
Rpi-Hardware-Watchdog-Diskussion
SwitchDoc Labs Dual WatchDog Timer
ATXRaspi R3 - LowPowerLab US $ 14,95
Ein hackbarer ESP8266 in einem Smart Plug Möchten Sie mit ESP8266 spielen, ohne sich Sorgen machen zu müssen die Hardware? - Mat 2017aug06
Reverse Engineering 101 des Xiaomi IoT-Ökosystems HITCON Community 2018 - Dennis Giese
Xiaomi WiFi-Buchse + MiHome-App 21.307 Aufrufe
espHome [ESP8266 / ESP32]
AliExpress WiFi Smart Plug
Smart Device - Wikipedia
WiFi-Garagentoröffner mit ESP8266 - Ray Wang 2016, 13. Mai 56.335 Aufrufe
Anhänge
Anhang A - Hinweise zum Lesen des WatchDog-Timers
Watchdog-Timer - Wikipedia
Linux WatchDog-Manpage
Linux-Watchdog - Allgemeine Tests
Anhang B - Linux-Befehle grep und dmesg lesen Notizen
Anhang C - systemd-Referenzen
systemd System- und Service-Manager - FreeDeskTop
systemd - Wikipedia
Anhang D - Referenzen zu Gabel und Gabelbombe
Fork (Systemaufruf) Wikipedia
Anhang E - Bash Learning Notes