Ankündigung

Einklappen
Keine Ankündigung bisher.

Wartezeit für ausstehende Prozesse beim Neustart (Hard kill SmartHome.py)

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

    Wartezeit für ausstehende Prozesse beim Neustart (Hard kill SmartHome.py)

    Hi!

    Ich habe ca. jedes zweite Mal das Problem, dass ich bei einem "service smarthome restart" ein "Hard kill SmartHome.py" bekomme. Im Log findet sich dann:

    Code:
    2013-08-19 22:21:29 SmartHome.py INFO     Number of Threads: 8
    2013-08-19 22:21:29 SmartHome.py INFO     Stop Plugins
    2013-08-19 22:21:29 SmartHome.py INFO     KNX: connection to smartgate:6720 closed
    2013-08-19 22:21:29 SmartHome.py INFO     Squeezebox: connection to 127.0.0.1:9090 closed
    2013-08-19 22:21:30 SmartHome.py INFO     Thread: SmartHome.py, still alive
    2013-08-19 22:21:30 SmartHome.py INFO     Thread: 1w-io, still alive
    2013-08-19 22:21:30 SmartHome.py INFO     SmartHome.py stopped
    Bei mir sind Onewire-Server und smarthome-Server seperate Rechner. Im Betrieb funktioniert alles (inkl. dem 1w-io samt Lesen) ohne Fehler, lediglich beim Neustarten des Scripts gibt es den Fehler. Kann man dem Neustarten mehr Geduld beibringen bzw. evtl. auch eine laufende Anfrage abbrechen?

    Grüße
    Robert

    #2
    Hi Robert,

    ich denke das Problem liegt darin, wie ich die Message transportier.

    Im Code geschieht folgendes:
    Code:
    def stop_sh():
        pid = read_pid()
        if pid:
            for i in range(4):
                try:
                    os.kill(pid, signal.SIGTERM)
                except OSError:
                    os._exit(0)
                time.sleep(0.7)
    
            # FIXME shutdown doesn't work all the time :-(
            try:
                os.kill(pid, signal.SIGKILL)
                print("Hard kill SmartHome.py")
            except OSError:
                os._exit(0)
    Er versucht vier mal SH.py mit eine SIGTERM zum schlafen zu legen. Dabei wartet es 0.7 Sekunden. Sollte dies nicht gelingen, da noch Threads (bei Dir 1w-io) laufen, dann kommt die Keule.
    Ich denke man kann das print auch weglassen

    Was meinst Du?

    Bis bald

    Marcus

    Kommentar


      #3
      Hi Marcus - verstanden!

      Allerdings - ich weiß das ist doof - würde ich lieber das "FIXME" entfernen/lösen...

      Weißt du denn woran es manchmal "klemmt"?

      Habe jetzt mal 10 Iterationen zugelassen und ausgegeben:

      Code:
      def stop_sh():
          pid = read_pid()
          if pid:
              for i in range(10):
                  print(i)
                  try:
                      os.kill(pid, signal.SIGTERM)
                  except OSError:
                      os._exit(0)
                  time.sleep(0.7)
      Damit komme ich nach 6/7 Iterationen zuverlässig hin...

      Grüße
      Robert

      Kommentar


        #4
        Hi Robert,

        woran es hängt wird ausgegeben:

        Code:
        2013-08-19 22:21:30 SmartHome.py INFO     Thread: SmartHome.py, still alive
        2013-08-19 22:21:30 SmartHome.py INFO     Thread: 1w-io, still alive
        Der SmartHome.py Thread muss laufen und ist die Hauptinstanz die alle anderen Threads kontrolliert.
        Der 1w-io ist aber noch beschäftigt und verhindert das herunterfahren des Hauptthreads. Je länger Du wartest desto höher die Wahrscheinlichkeit das er fertig wird.

        Ich habe da gerade noch eine kleine Optimierungsmöglichkeit entdeckt und in develop gefixed.
        1w-io blockiert nicht mehr so lange.

        Bis bald

        Marcus

        Kommentar

        Lädt...
        X