Überrüfen ob Python-Skript läuft

  • Guten Morgen allseits,

    ich habe mir ein Python-Skript geschrieben, welches überprüfen soll, ob es Wasser oder Feuer im Heizungsraum gibt und mich dann per Telegram benachrichtigt. Das Python-Skript soll ständig laufen und nicht jede Minute per crontab zur Überprüfung von Wasser und Feuer gestartet (Zeitverlust von max. 1 Minute wäre die Folge) werden. Wie kann ich jetzt sicherstellen, dass das Skript immer läuft (könnte abstürzen und es wäre keine Überwachung vorhanden)? Falls es nicht mehr läuft, soll es gestartet werden. Die Überprüfung, ob das Skript läuft, könnte ja wiederum mit crontab gemacht werden.

    Hat da jemand eine Idee? Kann es über ein Skript per bash gemacht werden? Kenne mich damit nicht aus.

    Vielen Dank und viele Grüße.

    whitechristmas

  • Hierfür würde sich ein Watchdog anbeten. Dafuer gibt es auch ein Paket fuer den Raspi, das installiert werden kann. Allerdings funktioniert es nicht, wenn sich der Pi wegen Spannungsversorgungsschwankungen ganz aufhängt (obwohl ein Hardware-Watchdog involviert ist).

    Wenn es aber nur um Software-Fehler im Script geht (Abstürze), dann würde es funktionieren. Es kann dann den ganzen Raspi resetten. Und wenn der watchdog daemon ausfaellt, dann erledigt der Hardware watchdog das resetten.

  • Hallo whitechristmas,

    ich bin kein Freund davon, dass eine Anwendung prüft, ob eine andere abgestürzt ist und diese dann ggf. wieder startet.

    Üblicherweise "härtet" man die Anwendung, dass sie nicht mehr abstürzen kann.

    Der Watchdog ist auch so eine zweifelhafte Geschichte, da er meistens einen Hard-Reset (mit allen seinen unangenehmen Folgen) durchführt.


    Ich habe mal ein Anwendungspaket geschrieben, bei dem durch ein Monitor-Programm etliche Anwendungen und Tools gestartet werden und deren Funktionsfähigkeit überprüft und ggf. wieder hergestellt wird. Da geht es aber mehr darum, sicherzustellen, dass diese Programme, die alle miteinander kommunizieren, überhaupt laufen. Sollte da mal ein Programm nicht aktiv sein, würden dessen Informationen dem Restsystem fehlen.

    In deinem Fall würde ich das ganz anders machen:

    Du hast ein Programm, das auf "Wasser" prüft.

    Du hast ein anderes Programm, das auf Feuer prüft.

    Das eine Programm sendet dem anderen nach einer abgeschlossenen Messung sinngemäß "Ich bin noch da". Bleibt diese Meldung über den üblichen Zeitraum aus UND gibt es auch sonst kein Lebenszeichen, dann erst startet das andere Programm diese Anwendung erneut.

    So hättest Du ein System von zwei Anwendungen, die sich gegenseitig regelmäßig auf Funktion prüfen.

    Die Kommunikation lässt sich ganz leicht über sog. named pipes (FIFO-Dateien) umsetzen. Eine andere Möglichkeit wären Sockets.

    Was willst du aber machen, wenn der Räscheknäscht wegen Hochwasser abgesoffen ist, und das daraufhin gezündete Feuer nicht die Kraft hat, das viele nachlaufende Wasser zu verdampfen? ;)


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Die Überprüfung, ob ...

    Evtl. geht es auch mit monit. Siehe z. B.:

    Code
    apt-cache show monit

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

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