Ankündigung

Einklappen
Keine Ankündigung bisher.

Lifeguard für sh.py (monit)

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Lifeguard für sh.py (monit)

    Hallo,

    da sh.py mittlerweile ein wichtiger Prozess in meinem Haus ist, würde ich gerne dafür sorgen, dass sh.py neu gestartet wird, wenn es crasht, zu viel Speicher nutzt oder hängt.

    Monit ist dafür prinzipiell geeignet.

    Jetzt kann man natürlich checken, ob es den Prozess noch gibt und wieviel CPU&Speicher er nutzt. Doch zusätzlich wäre sicher gut zu prüfen, ob sh.py noch etwas tut, oder?

    Was wäre hierfür mittel der Wahl? Alter des Logfile? (kann ja auch im Normalbetrieb ne Weile nix reingeschrieben werden, oder?). Der wiregated "toucht" zu diesem Zweck regelmäßig eine Datei. Wäre auch eine Möglichkeit.

    Oder regelmäßig mit dem CLI verbinden?

    Was meint ihr?

    Gruß,
    Hendrik

    #2
    Das Datei touchen kannst Du Dir ja in eine Logik schreiben.
    Die könnte auch diverse Sachen vorher checken (GA lesen, was weiss ich).
    Was ich mich frage: Hast Du schon mal den Fall gehabt, das sh.py abstürzt oder Amok läuft?
    Aus meiner (laien)-Sicht, ist die Qualität des Codes um ein Wesentliches besser als der wiregated.pl...

    Gruß
    Derzeit zwischen Kistenauspacken und Garten anlegen.
    Baublog im Profil.

    Kommentar


      #3
      Zitat von greentux Beitrag anzeigen
      Das Datei touchen kannst Du Dir ja in eine Logik schreiben.
      Ja, den Gedanken hatte ich auch.
      Die könnte auch diverse Sachen vorher checken (GA lesen, was weiss ich).
      Gute Idee!

      Was ich mich frage: Hast Du schon mal den Fall gehabt, das sh.py
      abstürzt oder Amok läuft?
      Ja, aber nicht mit einer sh.py Stable, nur mit Develop.

      Aus meiner (laien)-Sicht, ist die Qualität des Codes um ein Wesentliches besser als der wiregated.pl...
      Will ich nicht beurteilen (und kann es nicht).
      Aber die Qualität meiner Logiken wird schon ausreichen um sh.py in die Knie zu zwingen :-)

      Gruß,
      Hendrik

      Kommentar


        #4
        Hallo Hendrik,
        Zitat von henfri Beitrag anzeigen
        wenn es crasht, zu viel Speicher nutzt oder hängt.
        passiert das bei Dir? Oder ist es eine Vorsichtsmaßnahme?

        Davon abgesehen, ist das CLI Plugin eine gute Möglichkeit. Ich habe gerade in develop in ein neues cli-commando eingecheckt: rt für die runtime

        Bis bald

        Marcus

        Kommentar


          #5
          Zitat von mknx Beitrag anzeigen
          passiert das bei Dir? Oder ist es eine Vorsichtsmaßnahme?
          Nein. Das war mal (in Develop; Und die Probleme mit sqlite, von denen du ja weisst).
          Wenn das wieder passieren sollte, würd ich das hier natürlich melden.

          Davon abgesehen, ist das CLI Plugin eine gute Möglichkeit. Ich habe gerade in develop in ein neues cli-commando eingecheckt: rt für die runtime
          Mal gucken, was ich da mit Monit hinbekomme.
          Über eine Logik und eine Datei wird es auf jeden Fall funktionieren.

          Gruß,
          Hendrik

          Kommentar


            #6
            Würde mich über eine solche Funktion auch freuen. Ich denke da an den Watchdog vom RPI um einen kompletten Neustart auszulösen

            Ich hatte am 24.12. einen Fall - offenbar ein Problem beim Schreiben /Lesen auf die SD Karte. Leider hat er damit auch kein Logfile anlegen können. Die älteste Datei war vom Vortag. Beim Aufruf der Webpages - file not found.
            Debug mode lief fleißig (mit Fehlermeldungen) durch.
            Nach Neustart wieder stabiler Betrieb.

            Gruß Stephan

            Kommentar


              #7
              @henfri: ich kann heute Abend mal meine monit.conf für sh.py posten.

              Gruß,

              der Jan
              KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

              Kommentar


                #8
                Oh, das wäre super.
                Ich wollte gerade anfangen!

                Kommentar


                  #9
                  monitrc:

                  Code:
                    [....]
                  
                    check file smarthome.py.alive with path /mnt/ramdisk/smarthome.py.alive
                      if timestamp > 2 minutes then exec "/etc/init.d/smarthome.py restart"
                    
                    check process smarthome.py with pidfile /usr/local/smarthome/var/run/smarthome.pid
                      start program = "/etc/init.d/smarthome.py start"
                      stop program = "/etc/init.d/smarthome.py stop"
                      if 5 restarts within 5 cycles then timeout
                  alive.py:

                  Code:
                  #!/usr/bin/env python
                  # 
                  
                  from subprocess import call
                  
                  call("/bin/touch /mnt/ramdisk/smarthome.py.alive", shell=True)
                  logic.conf:

                  Code:
                  [alive]
                      filename = alive.py
                      cycle = 60
                  Monit ist die Standard Installation aus Debian Wheezy.

                  Gruss,

                  der Jan
                  KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                  Kommentar


                    #10
                    Danke!

                    Kannst du mir bitte noch dein Sh.py Startskript schicken?
                    In meinem erhalte ich kein pid-File.

                    Gruß,
                    Hendrik

                    Kommentar


                      #11
                      Hm, kann mir vielleicht jemand anderes das Startskript aus dem pi-Image schicken?

                      Gruß&Danke,
                      Hendrik

                      Kommentar


                        #12
                        Sorry, vergessen.

                        Code:
                        #!/bin/sh
                        ### BEGIN INIT INFO
                        # Provides:          smarthome
                        # Required-Start:    $syslog $network
                        # Required-Stop:     $syslog $network
                        # Should-Start:      eibd owserver
                        # Should-Stop:       eibd owserver
                        # Default-Start:     2 3 4 5
                        # Default-Stop:      0 1 6
                        # Short-Description: Start SmartHome.py
                        ### END INIT INFO
                        
                        DESC="SmartHome.py"
                        NAME=smarthome.py
                        SH_ARGS=""
                        SH_UID='smarthome'
                        
                        PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/bin
                        DAEMON=/usr/local/smarthome/bin/$NAME
                        PIDFILE=/usr/local/smarthome/var/run/smarthome.pid
                        SCRIPTNAME=/etc/init.d/$NAME
                        
                        [ -x "$DAEMON" ] || exit 0
                        
                        [ -r /etc/default/$NAME ] && . /etc/default/$NAME
                        
                        DAEMON_ARGS="$SH_ARGS"
                        
                        do_start()
                        {
                            #touch $PIDFILE
                            #chown $SH_UID $PIDFILE
                            #start-stop-daemon --start --quiet --chuid $SH_UID --pidfile $PIDFILE --exec $DAEMON --test > /dev/null || return 1
                            #start-stop-daemon --start --quiet --chuid $SH_UID --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_ARGS || return 2
                            sudo -u $SH_UID $DAEMON --verbose
                            ps ax | grep $DAEMON | grep -v grep | awk '{print $1}' > $PIDFILE
                        }
                        
                        do_stop()
                        {
                            sudo -u $SH_UID $DAEMON --stop
                            #start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
                            #RETVAL="$?"
                            #[ "$RETVAL" = 2 ] && return 2
                            #start-stop-daemon --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
                            #[ "$?" = 2 ] && return 2
                            rm -f $PIDFILE
                            #return "$RETVAL"
                        }
                        
                        do_reload() {
                            start-stop-daemon --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
                            return 0
                        }
                        
                        case "$1" in
                            start)
                                do_start
                                ;;
                            stop)
                                do_stop
                                ;;
                            #reload|force-reload)
                                #echo "Reloading $DESC" "$NAME"
                                #do_reload
                                #log_end_msg $?
                                #;;
                            restart)
                                #
                                # If the "reload" option is implemented then remove the
                                # 'force-reload' alias
                                #
                                echo "Restarting $DESC" "$NAME"
                                do_stop
                                sleep 1
                                do_start
                                ;;
                            *)
                                echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
                                exit 3
                                ;;
                        esac
                        Edit: Nur macht das keine PID mehr, wie ich gerade festgestellt habe. Ich arbeite daran.

                        Edit2 (rot): So gehts.
                        KNX, DMX over E1.31, DALI, 1W, OpenHAB, MQTT

                        Kommentar


                          #13
                          Danke, läuft jetzt beides bei mir!

                          Kommentar

                          Lädt...
                          X