Script stürzt ab - monit?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • HuHu ^^

    Schon seit längeren habe ich vor, meinen PI als Universalfernbedienung zu benutzten, die ich über das Handy steuern kann. Das ist mir jetzt endlich auch gelungen, am Pi sind IR-Sende-dioden angebracht und mittels LIRC konnte ich die Codes der Fernbedienungen auslesen. Auf dem Handy habe ich die App NetIO installiert, für diese muss ein Server auf dem Pi gestartet sein, dabei handelt es sich um dieses python-script:


    Ich habe selber vom Programmieren keine Ahnung, habe in dem Script nur den Teil beim "os.popen" verändert.
    Funktioniert so weit ganz gut, wenn ich aber auf dem Handy z.B. von mobilem Internet auf WLAN wechsel und in der App einen Button drücke, scheint das Script abzustürzen. Der Button bleibt gedrückt und weiter passiert nichts. Auch nach einem neustart der App oder sogar des Handy's ist das so, es lassen sich erst wieder Befehle senden, wenn ich den Pi neu starte (oder das python script, aber kA wie das geht).

    Also jetzt zur eigentlichen Frage:
    Wie kann ich das Python-script überwachen lassen, damit es, wenn es abstürzt, sofort neu gestartet wird?

    Mit monit habe ich es versucht, aber vermutlich falsch gemacht, weil ich davon null verstehe...
    Ich habe in die Datei /etc/monit/monitrc folgendes hinzugefügt:

    Code
    check program netio_server.py with path
    "/home/pi/RPi.GPIO-0.1.0/netio_server.py"
             if status != 0 then EXEC "/pratap/script-monit
             stop" else if succeeded then
             EXEC "/home/pi/RPi.GPIO-0.1.0/netio_server.py"


    Das Script liegt hier: [font="Monaco, Consolas, Courier, monospace"]/home/pi/RPi.GPIO-0.1.0/netio_server.py[/font]

    [font="Monaco, Consolas, Courier, monospace"]Ich würde gerne ein Tutorial schreiben, in dem für Anfänger (wie mich) erklärt wird, wie man seinen Pi als Universalfernbedienung benutzen kann. Dazu möchte ich natürlich auch, dass es richtig und zuverlässig funktioniert.[/font]

    [font="Monaco, Consolas, Courier, monospace"]Versteht jemand von euch, warum das Script scheinbar abstürzt? Wie kann ich es in so einem Fall automatisch neu starten lassen?[/font]

    [font="Monaco, Consolas, Courier, monospace"]Und bitte keine Antworten wie "lern python Programmieren" oder so, denn dafür fehlt mir die Zeit![/font]

    [font="Monaco, Consolas, Courier, monospace"]Für alle anderen Antworten schonmal ein großes DANKE![/font]

    [font="Monaco, Consolas, Courier, monospace"]LG simi-chan[/font]

    Einmal editiert, zuletzt von simanuel (9. Oktober 2013 um 19:26)

    • Offizieller Beitrag
    Zitat


    Und bitte keine Antworten wie "lern python Programmieren" oder so, denn dafür fehlt mir die Zeit!

    1. lern programmieren, nimm dir die Zeit. :). Du willst was programmieren ohne programmieren zu lernen, seltsame Einstellung. die NetioApp, welche im 433Mhz Thread extrem umfangreich behandelt wurde, bietet ein Haufen Möglichkeiten. Spätestens wenn du Rückgabewerte auswerten willst, kommst du wieder ins rudern.

    2. Wenn Python abstürzt bzw. sich unerwartet beendet schmeisst es eine Fehlermeldung. Diese Scheint es ja nicht zu geben. Was mich absolut wundert ist der Teil mit mobilem Internet/ WLAN. Wie hast du denn dein System eingerichtet, damit der Pi von deinem Handy erreich wird (über mobiles Internet). Bei diesem Projekt würde ich davon ausgehen das sich alle Geräte im WLAN befinden. Daher würde ich vermuten das der Server (über die gebunde IP) einfach nicht mehr vom WLAN aus erreichbar ist. Somit stürzt das Programm auch nicht ab, sondert kriegt nur keine Daten mehr.

  • Erstmal Danke für deine Antwort (Punkt 2.).

    Ich habe jetzt rausgefunden, dass das Script scheinbar tatsächlich nicht wirklich abstürzt (habe jetzt Supervisord mit Web-Interface zum laufen gebracht, dort wird es weiterhin als "running" aufgeführt).

    Ob der Pi über mobiles Internet erreichbar ist, ist völlig irrelevant, da das Phänomen auch auftritt, wenn die WLAN-Verbindung kurz unterbrochen wird, danach aber wieder voll verfügbar ist.

    Verliere ich, während NetIO geöffnet ist, kurz die WLAN-Verbindung, tritt der Fehler auf. Wenn ich anschließend eine Taste drücke, bleibt diese gedrückt, bis ich das script neu starte. Selbst wenn ich das Programm zwar während die WLAN Verbindung kurz abbricht geöffnet habe, aber NetIO schließe bevor ich es neu starte, tritt der Fehler beim nächsten drücken der Taste auf. (Also ist es irgendwie nicht gut, dass NetIO Verbunden ist und die Verbindung dann abbricht). Beende ich NetIO, unterbreche dann die WLAN-Verbindung kurz und starte NetIO dann wieder, tritt das Problem nicht auf (weil NetIO zum Zeitpunkt der Unterbrechung nicht verbunden war).

    Evtl. liegt also der Fehler nicht, wie erst gedacht, daran, dass das Script abstürzt, sondern irgendwie evtl. daran, dass das Script dann einfach nicht mehr tut, was es soll, oder es liegt an der App (was ich mir aber nicht vorstellen kann, denn selbst nach neustart des Handy's tritt der Fehler ja auf, bis ich das python script manuell neu starte...)

    • Offizieller Beitrag

    du könntest testen ob der netio server noch reagiert indem du per ssh (oder von nen anderen rechner aus) probierst den socketserver abzusprechen. Google python socket server, in den docs dazu findest du direkt darunter den clienten. den ausführen (vorher IP des PI anpassen). Dann sendest du irgendwas und schaus ob der server antwortet. Dann weisst du ob es am server oder der App liegt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!