Ankündigung

Einklappen
Keine Ankündigung bisher.

LBS EXEC Daemon beendet sich ohne erkennbaren Grund

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

    LBS EXEC Daemon beendet sich ohne erkennbaren Grund

    Ich habe ein Problem mit meinem HUE Light Baustein, bei dem ich nicht weiterkomme.

    Der Daemon läuft wie folgt in einer Endlosschleife

    PHP-Code:

    while (getSysInfo(1))
    {
    ...

    Doch irgendwann wird der LBS Daemon ohne Meldung im Fehlerlog beendet. Führt aber noch die Befehle die nach der o.g. while Schleife kommen aus. Dort wird nämlich die message queue gelöscht und ein Debug Output erzeugt. D.h. ich sehe im Tracelog, dass diese Befehle ausgeführt wurden. Erstaunlich ist dabei, dass der EXEC Teil offensichtlich schon vor dem Verlassen der Schleife seine $id vergessen hat, denn z.B. die Ausgabe der Versionsnummer, die sich die debug Funktion aus einer Variablen holt bleibt leer, obwohl sie am Anfang gesetzt wurde. Dies kann eigentlich nur passieren, wenn die $id nicht mehr stimmt oder nicht mehr gesetzt ist.

    Meine Fragen:
    1. Gibt es hierfür irgendeine sinnvolle Erklärung?
    2. Wie kann getSysInfo(1) false werden, ohne das EDOMI beendet wird? (ich habe schon 100x geprüft, ob irgendein "break" falsch gesetzt ist. Ist aber nicht der Fall)
    3. Wird getSysInfo(1) ggf. false wenn die $id nicht mehr korrekt ist?
    4. Wie sonst kann die $id verloren gehen? (sie wird in meinem Code definitiv nicht überschrieben)

    Irgendeine Idee?


    #2
    $id ist eine stinknormale PHP-Variable und wird sehr wahrscheinlich nicht ihren Inhalt "vergessen" getSysInfo(1) liefert den aktuellen Status unabhängig von $id. Vermutlich wird Dein LBS irgendwo innerhalb der while-Schleife aus einem anderen Grund aussteigen...
    EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

    Kommentar


      #3
      Ist es denn andersherum so, dass $id bzw Funktionen, die mit $id arbeiten, nicht mehr verwendet werden können, wenn getSysInfo(1) gleich FALSE wird? Ich hatte in dem Beispiel "EXEC-Script als Daemon" gelesen:

      Aber Achtung: In diesem Moment stehen keine Logikfunktionen (Eingangswerte, etc.) mehr zu Verfügung!
      Wenn ich EDOMI nämlich beende, dann sieht die Ausgabe im Tracelog genauso aus wie im o.g. Fehlerfall, d.h. es wird eine Debug Ausgabe gemacht, wobei entsprechend Variablen nicht angezeigt werden, z.B. ein getLogicElementVar($id,1), in dem meine Version steht bleibt dann leer.

      Ich werde einfach mal hinter der Schleife

      PHP-Code:
      while (getSysInfo(1)) 
      {
      ...
      }

      writeToTraceLog(0,true,'getSysInfo: '.getSysInfo(1)); 
      Eine debug Ausgabe von getSysInfo(1) machen. Dann kann ich ja sehen, ob die while Schleife durch getSysInfo(1) verlassen wurde oder irgendwo in meinem Code.

      Irgendeine andere Idee?


      Kommentar


        #4
        Nach dem beenden von EDOMI stehen diese Funktionen nicht mehr zu Verfügung (also getLogicElementVar, u.a.).
        EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

        Kommentar


          #5
          Mir ist gerade aufgefallen, dass die Ursache für das hier geschilderte Problem zu 99% auch das Timeout der mySQL Verbindung ist, denn es handelt sich hier um den HUE Light Baustein bei dem ein anderes Problem HIER geschildert ist. In diesem Fall hier hatte ich das while getSysInfo(1) durch ein while (1) ersetzt, damit sich der Baustein nicht beendet, konnte aber nicht herausfinden warum es zu diesem Problem kam.

          @Christian: ggf. kannst du bestätigen, dass getSysInfo(1) ein FALSE liefert wenn die DB connection weg ist? Dann wäre zumindest die Ursache klar.

          Kommentar


            #6
            Kann ich bestätigen. Daher sollte es ja auch ...while (getSysInfo(1))... lauten, denn der angenehme Nebeneffekt ist dabei, dass die SQL-Verbindung gehalten wird (getSysInfo() fragt nämlich die DB ab)
            EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

            Kommentar


              #7
              Zitat von gaert Beitrag anzeigen
              Kann ich bestätigen. Daher sollte es ja auch ...while (getSysInfo(1))... lauten, denn der angenehme Nebeneffekt ist dabei, dass die SQL-Verbindung gehalten wird (getSysInfo() fragt nämlich die DB ab)
              Aber das erklärt es denn nicht ganz. Denn damals hat sich mir das getSysInfo(1) von alleine verabschiedet. Aber eigentllich kann das nicht aufgrund eines DB Timeouts passieren, wenn getSysInfo() die DB connection aufrecht erhält.

              EDIT:
              Kommando zurück. Innerhalb der While-Schleife war ein blockierendes Lesen aus einer Message-Queue. D.h. wenn 8h keine Message ankommt, dann ist die DB connection weg. Wenn dann eine Message kommt, dann startet der nächste Durchlauf und getSysInfo(1) liefert FALSE und schon ist Schluss mit EXEC.
              Zuletzt geändert von jonofe; 08.07.2016, 14:44.

              Kommentar


                #8
                Problem erkannt, Problem gebannt

                Man könnte natürlich dieses SQL-Timeout auch hochsetzen (in der my.ini), aber leider nicht auf "unendlich", so dass das Problem(chen) höchsten verlagert werden würde.
                EDOMI - Intelligente Steuerung und Visualisierung KNX-basierter Elektro-Installationen (http://www.edomi.de)

                Kommentar

                Lädt...
                X