NEWS
UNSOLVED SQL Adapter Update - etwas ging schief ...
-
@apollon77 (hoffe du bis tder richtige ansprechpartner)
habe gestern den sql-history adapter updaten wollen - es kamen viele fehlermeldungen und letztlich hat sich das update beendet - der sql adapter ließ sich nicht mehr starten
anschliessend habe ich den befehl
npm install iobroker.sql@1.8.0 --production
ausgeführt, einen upload gemacht um wieder eine ältere version zu bekommen - der adapter läuft wieder, aber es wird mir die version 1.9.5 angezeigt.
was ist da passiert
log hier - am ende des files
iobroker.2019-05-16.log -
Also erst einmal nach einem manuellen "npm install iobroker.sql" musst Du auch ein "iobroker upload sql" machen damit interne FIles aktualisiert werden.
Zum 1.9.5 install:
Kann es sein das Du einfach nicht lang genug gewartet hast? Der sql Adapter hat sqlite3 als Abhängigkeit und die wird nativ bei Dir kompiliert/gebaut und das kann teilweise dauern. Was ist es denn für ein System? Ggf kann das auch in RAM Probleme laufen.Am besten versuch doch mal den 1.9.5 so an der Kommandozeile wie du das dowengrade gemacht hast. ggf beobachte RAM verbrauch oder stoppe iobroker vorher das mehr RAM frei ist. Das hat bei anderen schon geholfen. Danach das "Upload" nicht vergessen.
-
habe es "händisch" installiert - hat nur 4 objecte installiert - dauerte keine 10 sek.
auf jeden fall läuft es
vielen dank
-
sorry apollon, das ich wieder störe: - ich habe jetzt folgendes szenario - ich bin mir nicht sicher, ob das was mit sql zu tun hat - aber vorher hatte ich das problem nicht (Node 10.15.3 - NPM 6.4.1 - Js-Controller. 1.5.8 )
der js-controller stürtzt einfach ab - es gibt keine fehler im iobroker log ( manchmal wird die logdatei gelöscht ? ) - der logvorgang stoppt einfach. ich habe auch schon nachgesehen, ob eins meiner scripte ein problem macht - aber die neusten laufen auch bei anderen ohne fehler - was ich bis jetzt gefunden habe:
syslog,messeges zeigen folgenden fehler:
May 21 20:11:56 raspberry3 kernel: [49970.464407] traps: iobroker.js-con[569] trap invalid opcode ip:c95dd5cc262 sp:7ffc04530cd0 error:0
es laufen alle adapter (top) - nur der js-controller nicht
das ist das log von heute morgen: gegen 8:36 war wohl wieder ende: habe nur eine sache gefunden, zeile 1235 (zeit: 08:36:10.290)
davor lief alles - dann stoppt alles
log22.txthabe jetzt folgende schritte unternommen:
- sql instanz gelöscht
- iobroker stopp
- auf terminal - npm del sql
- npm install iobroker.sql@1.9.4 --production
- npm rebuild - > bekam am ende folgenden fehler: unix-dgram konnte nicht installiert werden: ist das wichtig ?)
- zur sicherheit npm cache clean
- iobroker start
log für npm rebuild: 2019-05-22T07_46_58_955Z-debug.log
hast du eine idee, was ich noch machen könnte ist das dgram wichtig ?
im moment hat er wieder gebootet und alles scheint zu laufen - wer weiß wie lange
-
Also irgendwie gabs da ein kernelfehler ... auch war es der js-cpontroller und nicht sql (steht ja der relevante Prozess dabei. Wenn sieht das nach einem Bug in nodejs aus oder ein natives modul vom js-controller verursacht es ... Beobachte es mal weiter.
Ja, unix_dgram in der Version die beim js.controller genutzt wird ist nicht mit node 10 kompatibel, aber auch optional weil nur für Syslog relevant. Kannst Du ignorieren.
-
@apollon77 erstmal danke
ich weiß - meine vermutung wegen sql ist nur, dass ich dort ein wenig probleme hatte und es das einzige ist, was einen fehler anzeigte, bevor alles andere anfängt zu terminieren
ach ja - der kernelfehler war von gestern abend - heute war garnichts in den syslog sachen, sondern nur im iobroker log , der sql fehler danach terminierung und stop von allem
wie du gesagt hast, warte ich bis zum nächsten fehler, danach denke ich werde ich entweder den js-controller oder die npm version downgraden !? - was würdest du zuerst downgraden
-
Du hast aber keinen sql Fehler gezeigt (oder meinst du das mit unix_dgram?). Das wäre dann ega.
Der "alles startet neu" passt zu den js-controller Crash
-
@apollon77 in dem log22.txt file bei zeile 1235
davor alles ok - nach sql fehler wird alles gestoppt
-
Also faktisch ist diese Zeit die Ursache das alles stoppt:
2019-05-22 08:36:10.279 - [32minfo[39m: host.raspberry3 received SIGTERM
Das ist genau das wo der kernel dem js-controller gesagt hat "beende dich mal, da ist was komisch". Und dann fährt alles runter
Die Zeile
2019-05-22 08:36:10.290 - [31merror[39m: sql.0 Error: connect ECONNREFUSED 192.168.178.59:3306
Sagt nur das die Verbindung zum SQL Server beendet wurde ... warum, könntest DU ggf im sql-server Log finden, ggf zuviele Verbindungen falls er das Audit-Feature an hat und damit pro Datenpunkt ein NULL geschrieben wird.
-
zur zeit - klopfe auf holz:
habe mal viele datenpunkt-aufzeichnungen gestoppt um den sql server etwas zu schonen - den habe ich durch zusammen-googelen so eingestellt, dass er wenig speicher verwendet ( da könnte ein problem liegen, da ich eigentlich keine ahnung habe, was ich da alles eingestellt habe) - auch die flot diagramme, welche ja auch auf sql zugreifen habe ich aus der vis gelöscht
die meldungen, die kamen waren meist zu viele connections - das ist jetzt nicht mehr aufgetreten
aber selbst dann, waren noch die selben iobroker aussetzer da.
ich habe dann den js-controller wieder auf 1.4.7 gesetzt (vorher 1.59) - seitdem läuft iobroker wieder stabil - mit 1.5.9 lief er einige wochen auch sehr stabil (habe aber in letzter zeit immer mehr mit/ vom sql adapter gefordert)
kann das zusammenspiel zwischen sql adapter und js-controller dieses problem verursachen ? sagt der js-controller: ich kann keine aufzeichnungen in sql machen - also beende ich mich
-
Also aus deinen logs gewinnt eindeutig das syslog was sagt "fehler in js.controller prozess den kille ich mal". Das richtig gute an ioBroker ist das halt alles als eigene Prozesse läuft und sich daher nicht in die Quere kommt.
Also die "too many connections" sind ein anderen thema beim sql-Adapter und hat auch damit nichts zu tun.Am Ende kann ich jetzt nur sagen: Mal Kernel updaten, nodejs updaten (aber denke das warst du auf dem aktuellsten 10er). Auch sonst können wir mit "Javascript code" an sich solche Kernel Dinge nicht verursachen ...
-
@apollon77
mein kernel 4.19.0-4-amd64 - zur zeit: ( ->4.20 -> 5.0) - (also das ist doch ein einigermaßen neuer kernel)node 10.15.3 und npm (jetzt 6.9 ) war (aber 6.4.1)
jetzt mach ich erstmal wieder den neusten sql adapter drauf - dann versuch ich mal ob ich den sql server besser konfigurieren kann (auch wenn das alles nichts damit zu tun hat) evtl schaue ich mal, ob ich etwas vom linux server löschen kann - der hat einiges an service laufen) (hat 4.84 GB ram) - könnte der sql server linux veranlassen, iobroker zu beenden oder ist das sigterm ausschliesslich vom js-controller?
vielleicht probiere ich in ein paar tagen den js-c 1.5.9 nochmal
ist ein blödes gefühl - ich weiß nicht, was es eigentlich war und falls es der js-controller ist, wüßte ich nicht, was zu tun ist) - zuerst läuft er, dann aber auf einmal macht er probleme !
-
Hi @apollon77
bitte dich nochmals um eine antwort
ich versuche gerade objecte und json zu verstehen - dazu hole ich über sql einen wert - diesen möchte ich in einen datenpunkt schreibenund schwubs: SIGTERM - meine frage - ist das normal, dass bei einem solchen fehler iobroker neustartet?
Fehler:
javascript.0 2019-05-25 11:12:54.094 info starting. Version 4.1.12 in /opt/iobroker/node_modules/iobroker.javascript, node: v10.15.3 host.raspberry3 2019-05-25 11:12:52.967 info instance system.adapter.javascript.0 started with pid 2018 host.raspberry3 2019-05-25 11:12:32.994 info received SIGTERM host.raspberry3 2019-05-25 11:12:27.987 info received SIGTERM host.raspberry3 2019-05-25 11:12:27.880 info iobroker exit 0 host.raspberry3 2019-05-25 11:12:27.870 info iobroker Starting node restart.js host.raspberry3 2019-05-25 11:12:27.702 info iobroker _restart host.raspberry3 2019-05-25 11:12:27.702 error TypeError [ERR_INVALID_CALLBACK]: Callback must be a function at maybeCallback (fs.js:128:9) at Object.writeFile (fs.js:1158:14) at processMessage (/opt/iobroker/node_modules/iobroker.js-c host.raspberry3 2019-05-25 11:12:27.701 error uncaught exception: Callback must be a function
wie erwähnt -ich versuche gerade über trial und error zu lernen:
hier das script (möchte den wert connections auslesen:sendTo('sql.0', 'query', 'show status like "Connections"', function (result) { if (result.error) { console.error(result.error); } else { // setState("controll-own.0.FUTRO.SQLConnections",JSON.stringify(result.result)); //setState("controll-own.0.FUTRO.SQLConnections",result.Value); //setState("controll-own.0.HANDY.SQLToDos",result.Value); //show result console.log('Rows: ' + JSON.stringify(result.Value)); console.log(result.Value); // var obj = JSON.parse(result); // console.log('Hardware-Version' + obj.value); } });
-
@apollon77
und jetzt wird es noch verrückterer stürzt jedesmal ab wenn ich im log-tab auf lösche log gehe - dann kommt sofort:
host.raspberry3 2019-05-25 11:43:22.380 info iobroker _restart host.raspberry3 2019-05-25 11:43:22.380 error TypeError [ERR_INVALID_CALLBACK]: Callback must be a function at maybeCallback (fs.js:128:9) at Object.writeFile (fs.js:1158:14) at processMessage (/opt/iobroker/node_modules/iobroker.js-c host.raspberry3 2019-05-25 11:43:22.379 error uncaught exception: Callback must be a function web.2 2019-05-25 11:43:08.712 info <==Disconnect system.user.admin from ::ffff:192.168.178.26
-
Gleiche Frage wie im GitHub-Issue: Welcher js.controller?
Der 1.4.2er hatte exakt hier eine Inkompatibilität mit NodeJS 10, weshalb nodejs 10 auch offiziell mit dem js.controller 1.4.2 nicht unterstützt ist. Um dazu zu umgehen brauchst Du einen 1.5er js-controller.
-
ich hatte den 1.5.9er -und node 10 -es machte probleme - andere
dann habe ich den 1.4er und hatte das mit dem löschen des log-tab problem (github)
mittlerweile habe ich node 8.16, js-co. 1.5.9 und es scheint momentan stabil zu sein - zumindest funktioniert der admin wieder und auch wenn ich mal einen fehler in einem script erzeuge, kommt eine fehlermeldung aber iobroker läuft weiter - so wie es sein soll.
würdest du mir bitte noch eine frage zum mysql server beantworten
ich habe ein kurzes script geschrieben
sendTo('sql.0', 'query', 'show status like "Connection_errors_max_connections"', function (result) { if (result.error) { console.error(result.error); } else { setState("controll-own.0.FUTRO.SQLConnections",JSON.stringify(result.result)); console.log('Rows: ' + JSON.stringify(result.result)); } });
ich versuche aus dem ergebnis:
script.js.Armin_Schalter.ALLERLEI.SQLConnectionsGet: Rows: [{"Variable_name":"Connection_errors_max_connections","Value":"0"}]
den wert von value also "0" in den datenpunkt zu schreiben - würdest du mir kkurz den trick zeigen, wie das geht
-
ich habe die sql-abfage jetzt so gelöst:
sendTo('sql.0', 'query', 'show status like "Connection_errors_max_connections"', function (result) { if (result.error) { console.error(result.error); } else { console.log('Rows: ' + JSON.stringify(result.result)); var abc = JSON.stringify(result.result); abc = abc.replace( /[|]/g , ""); var json = JSON.parse(abc); console.log(json.Value); setState("controll-own.0.FUTRO.SQLConnections",json.Value); } });
irgendwie check ich das result.result nicht - dachte es ist ein object welches ich direkt mit JSON.parse verarbeiten könnte - is aber nicht
hauptsache es läuft wieder alles
-
result.result[0].Variable_name bzw result.result[0].Value
In der Variable result (kannst Du auch anders nennen, steht in der Callback Funktion direkt in deinem Code) steht ein Objekt was einen key "error" und einen Key "result" hat.
In Result ist ein Array mit den Antwortzeilen Drin. Dort pro Zeile EIn Objekt mit den Spaltennamen als Keys und dem ValueAlso:
- result: Name der Variable die Du im Ergebnis bekommst
- result: Du willst auf das Ergebnis Zugreifen
- [0]: erste Zeile der Antwort
- .Value Wert
-
vielen dank - werd's gleich mal testen
-
jetzt klappts
console.log(result.result[0].Value); setState("controll-own.0.FUTRO.SQLConnections",result.result[0].Value);