Hilfe gesucht: Automatischer Restart nach Crash

  • Im Log des Master erschien 'livesign received' nicht. Ich habe daraufhin doch Apache eingerichtet und bin zur ersten Version zurückgekehrt. Jetzt läuft der Watchdog wie er soll und der automatische Restart klappt. Ich füge das nun in mein Skript ein und hoffe, dass das Absturzproblem damit aus der Welt ist.


    Herzlichen Dank nochmal!

  • Der Restart klappt, aber das Absturzproblem ist leider noch nicht aus der Welt.


    Ich habe in die OnInit-Routine eingebaut:


    window.addEventListener("error", fehlerbehandlung);


    dazu diese Funktion in das Skript


    function fehlerbehandlung (errorEvent)

    {

    var fehler = "Fehlermeldung:\n" + errorEvent.message + "\n" + errorEvent.filename + "\n" + errorEvent.lineno;


    WriteProto(fehler);

    errorEvent.preventDefault();


    return true;

    }


    Nun wird in meinem Protokollfeld der Fehler gemeldet, aber immer mit Zeilennummer 0.


    Außerdem gab es im Skript schon


    function _API_Callback_Error()

    {

    console.log("OnObjSrvError"); // Fehlermeldung -> Console

    }


    Eine von beiden schlägt vor einem der Abstürze an. Die Fehlerursache liegt außerhalb meines Skripts. Deshalb müsste ich es jetzt hinkriegen, das Slave-Fenster nach der Fehlermeldung zu schließen, damit der Master es neu öffnet. Ein einfaches 'close;' hat nicht genügt. Wie macht man das?

  • Zitat

    Der Restart klappt, aber das Absturzproblem ist leider noch nicht aus der Welt.

    Wie ist das zu verstehen? Wird der Absturz vom Master nicht erkannt, weil der Slave trotzdem Lebenszeichen sendet?


    Zitat

    Deshalb müsste ich es jetzt hinkriegen, das Slave-Fenster nach der Fehlermeldung zu schließen, damit der Master es neu öffnet. Ein einfaches 'close;' hat nicht genügt. Wie macht man das?

    Wenn der Absturz direkt auf der Seite erkannt wird, könntest Du einfach einen Reload versuchen:

    https://developer.mozilla.org/…s/Web/API/Location/reload

    Wenn das funktioniert, brauchtest Du die Struktur mit Master und Slave nicht.

  • Ja, das Lebenszeichen kommt weiter, es kommen nur keine Daten der KNX-Anlage mehr herein.


    Ich habe nun das mitgelieferte Interface-Skript ein bisschen studiert. Es gibt da eine Funktion, die bei einem Callback-Fehler aufgerufen wird, die bisher nur einen Log-Eintrag machte. Die habe ich ergänzt um den Restart des IndicationListener:


    function _API_Callback_Error()

    {

    console.log("OnObjSrvError");


    baos.API_StopIndicationListener(); // Stop indication listener

    baos.API_StartIndicationListener("Default"); // Restart indication listener

    }


    Meine Vermutung ist nämlich, dass dieser bei einem Fehler aufhört zu funktionieren.


    Außerdem hatte ich in meinem Skript ergänzt:


    window.addEventListener("error", fehlerbehandlung);


    function fehlerbehandlung (errorEvent)

    {


    opener.killme(); // Fenster vom opener schließen lassen, damit es neu geöffnet wird


    }


    Reload könnte die bessere Lösung sein. Ich wusste gar nicht, dass es diese Funktion gibt. Das probiere ich als nächstes.

  • Restart indication listener hat nicht gereicht. Aber Reload ist die Lösung. Die Funktion sieht jetzt so aus:


    function _API_Callback_Error()

    {

    console.log("OnObjSrvError");

    location.reload(); // Fenster neu laden

    }


    Die Ursache für den "OnObjSrvError" kann ich nicht ausmachen. Der Fehler tritt sporadisch im Interface zu dem KNX-Ethernet-Gateway auf, zu dem ich keinen Zugang habe, im Schnitt einmal pro Tag. Jetzt wird halt das Fenster neu geladen und damit läuft das Skript seit Tagen einwandfrei.


    Problem gelöst. Nochmals vielen Dank!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!