Hallo,
ich habe folgendes Problem. Mittels Python-Script steuer ich ein kleines PiOLED-Display (I²C) an einem Zero an, welches die Uhrzeit und diverse Werte ausgibt. Auf dem Zero läuft ein DHCP- und ein Webserver. Bildschirm o.ä. ist nicht angeschlossen, ich habe Zugang per SSH bzw. Webinterface. Der Pi läuft 24/7.
Das funktioniert einwandfrei und auch im tagelangen Dauerbetrieb in einer Testumgebung perfekt. Das Script starte ich bei Raspi-Start über rc.local im Hintergrund ("&")
Wenn das Gerät jedoch im echten Einsatz ist, dann kommt es vor, daß plötzlich das Display dunkel ist. Mittels "ps aux" kann ich dann sehen, daß das Script gar nicht mehr läuft. Es ist also irgendwann abgestürzt und beendet. In den Logfiles (/var/logs) finde ich nichts, was darauf schließen lassen könnte, andere Fehlermeldungen gibt es ja nicht.
Bei der Suche konnte ich den Absturz darauf eingrenzen, daß das immer dann passiert, wenn die Prozessorlast durch Webanfragen plötzlich kurzzeitig extrem hoch ist. Das war in meiner Testumgebung nie der Fall, hab ich so nicht auf dem Schirm gehabt.
Nun zur eigentlichen Frage? Wie kann ich es bewerkstelligen, daß das Script quasi auf Funktion überwacht wird und nach Absturz neu gestartet wird?
Die PID zu überwachen ist IMHO nicht machbar, da das Script ja nach jedem Neustart des Gerätes eine andere hat. Man müßte also ersteinmal ermitteln, welche PID das Python-Script gerade hat. Ob das überhaupt geht, weiß ich nicht, übersteigt aber wohl auch meinen aktuellen Kenntnisstand.
Mit einem Bash-Script a la
kann ich das zwar in einer Schleife laufen lassen, das ist aber völlig ungeeignet, weil ich dann ja jedesmal meine Displayanzeige neu starte, das wird auch nichts.
Wie kann ich das lösen? Ich brauch praktisch einen Watchdog, der prüft, ob das Script noch läuft und wenn nicht, dieses neu startet.