NEWS
Absturz des Javascript Adapters und Auswirkungen auf States und Timer
-
Es kommt ja vor, dass der Javascript Adaptor ungeplant einen Neustart macht.
Dabei ist mir nicht klar, ob die aktuellen Zustände erhalten bleiben oder von der Harddisk wiederherstellt werden.
Außerdem was passiert mit verzögerten Zuweisungen an Objekten? Bleiben diese Timer erhalten oder ist alles gelöscht?
Hintergrund der letzten Frage ist auch, dass mir nicht klar ist, wie häufig der "Systemzustand" auf die Harddisk ausgelagert wird.
Gibt es darüber irgendwo eine erhellende Doku?
-
Zuerst einmal wäre der Grund für "ungeplante Neustarts des ja Adapters" interessant, weil der das nur macht wenn in den javascripts grobe Fehler drin sind oder keine fehlerbehandlubg eingebaut ist wenn man zB einen externen http request macht oder so.
Ansonsten:
Der Adapter selbst ließt und schreibt die Daten alle. Ichs direkt sondern nur Überbein ja-Controller. Also alle getState/setState Daten sind sicher. Der js-Controller schreibt glaube ich im Standard alle 30-60sek oder so auf Platte (States/objects.json in iobroker-data)
Oder wenn du Redis für die States nimmst ist nochmal anders.
Also States sollten immer problemlos sein und wenn verlierst du ein paar sekunden -falls js-Controller mit abschmiert.
Wenn JavaScript weg ist dann auch alle Verzögerungen weil ja alle scripte neu gestartet werden
-
der javascript adapter startet einfach so neu bei dir … aha... dann würde ich schauen warum ..
fangen wir mal klein an
System ??
wie viele instanzen des Adapters??
wie viele Scripte ??
alle ohne Fehler ??
-
Danke für die Antwort.
Die Ursache warum der JavaScript Adapter startet ist mir klar. Es war ein fehlendes Errorhandling.
Ich verstehe apollon77 Antwort jetzt so:
1. "Backup" auf Harddisk ca. alle 60 Sekunden.
2. Nach dem Neustart werden von der Harddisk die States wiederhergestellt.
3. Alle Timer z.B. mit SetStateDelayed oder setTimeout usw. sind nicht mehr aktiv
Danke für die Rückmeldung.
Hintergrund war eine Steuerung meiner Gartenbewässerung.
Das Ausschalten sollte ich dann lieber mit einem Cron Statement machen als mit einem Timer für den Fall, dass der J-Adapter doch mal abstürzt.
Außerdem könnte man noch mehrere J-Adapter installiert und besonders Safety relevante Funktion mit möglichst minimalem Codeumfang (die dann 100% getestet ist) in einem separaten J-Adapter installieren.
Damit könnte man eine Trennung von etwas schlechter getesten Code erzielen. Das steht ja auch so als best practice in der Javascript Doc.
-
Ich verstehe apollon77 Antwort jetzt so:
1. "Backup" auf Harddisk ca. alle 60 Sekunden.
2. Nach dem Neustart werden von der Harddisk die States wiederhergestellt. `
Jain. States werden NICHT vom js Adapter gesichert sonder das macht der Hauptprozess von iobroker, der js-Controller. Wenn ein Adapter abstürzt läuft der weiter!! Also bei einem Neustart eines Adapters gelten immer noch alle States bis zuletzt und es wird auch kein Backup geladen oder so.