NEWS
Windows Admin 3.4.7:Adapter Instanz wird nicht korrekt beendet
-
Hallo Zusammen,
Unter Windows werden die Instanzen der Adapter nicht korrekt geschlossen. Dh. beende ich eine laufende Instanz (zB. web.0) mit den Aktions-Button bekomme ich folgende Meldungen im Log File:
****host.TEST_Win7 2018-08-27 15:11:25.844 info instance system.adapter.web.0 terminated with code null ()
host.TEST_Win7 2018-08-27 15:11:25.844 warn instance system.adapter.web.0 terminated due to SIGTERM
host.TEST_Win7 2018-08-27 15:11:25.813 info stopInstance system.adapter.web.0 killing pid 3172
host.TEST_Win7 2018-08-27 15:11:25.813 info stopInstance system.adapter.web.0****
Unter OSX wird die Instanz mit folgenden Meldungen bendet:
****host.iMAC.fritz.box 2018-08-27 15:28:47.062 info instance system.adapter.web.0 terminated with code 0 (OK)
webb.0 2018-08-27 15:28:47.052 info terminating
web.0 2018-08-27 15:28:47.049 info terminated http server on port 8082
web.0 2018-08-27 15:28:47.048 info terminating http server on port 8082
host.iMAC.fritz.box 2018-08-27 15:28:47.047 info stopInstance system.adapter.web.0 killing pid 37136
host.iMAC.fritz.box 2018-08-27 15:28:47.047 info stopInstance system.adapter.web.0****
was auffällt ist das bei Windows die Meldung „Instanz über Sigterm beendet“ erscheint , was wohl zur Folge hat das die Call-Back Funktion adapter.on('unload', function (callback) {} nicht aufgerufen und der Prozess mit Rückgabewert NULL beendet wird.
In diesem Fall können diese gestoppten Instanzen nicht mehr von anderen Adapter-Instanzen mit Adapter.GetForeignObject (…) geprüft werden ob sie enabled sind oder nicht da sie global nicht mehr auffindbar sind. :!:
Bei OSX tritt dieses Problem nicht auf , wie im Logfile ersichtlich, wird die Unload-Callbackfunktion von web.0 aufgerufen und das Programm korrekt beendet Andere Adapter.Instanzen können dann über Adapter.GetForeignObject (…) prüfen ob die Instanzen angehalten worden oder nicht.
Info: Nutze bei beiden Node 6.11
Ist das Problem bekannt ?
-
Hallo,
kann denn niemand was zu dem Problem sagen
. Ich hatte gehofft das sich der Entwickler des Admin Adapters mal meldet was die Ursache sein kann. Ich komme hier so nicht mehr weiter. Ich habe mir einen Adapter geschrieben der global andere Adapter Instanzen überwacht und diese automatisch beendet wenn bestimmte Zuständen eintreten und dann wieder selbstständig z.B. Nach einer Zeitverzögerung wieder startet. Leider funktioniert das ganz unter Windows wie vorherigen Beitrag von mir beschrieben nicht, im Gegensatz zu OSX bzw. Linux.
Über eine Antwort wäre ich sehr froh, ob es überhaupt eine Lösung für Windows gibt.
im voraus besten Dank.
-
Trage jetzt zwar nicht zur Lösung Deines Problem bei, wüsste aber gerne, wie Du die überwachten Adapter überwachst, stoppst und startest. Machst Du das über den Datenpunkt "system.adapter.<adaptername>.<instanz>.alive"?</instanz></adaptername>
-
Hallo Stabilostick,
ich mache das mit adapter.getForeignObject(….)
Bei Programmstart frage ich ob die Instanz exisitiert mit
adapter.getForeignState( "system.adapter." + Adaptername + ".alive", function (err,state){ .... );
im weiteren Programmverlauf prüfe ich einige Abhängikeiten und führe dann folgenden Code aus:
adapter.getForeignObject(sysName, function (err, obj) { if (err) { adapter.log.error(err); } else { if (obj != null) { ... obj.common.enabled = false; } } });
Die Instanz wird dann angehalten.
Wenn ich die Instanz wieder starten will setze ich common.enabled wieder true. Das Problem bei Windows ist, das die Funktion
getForeignObject(sysName, function (err, obj) obj == NULL zurück gibt wenn vorher common.enabled auf false gesetzt wurde.