FHEM Absturz wenn configDB nicht erreichbar

Begonnen von crispyduck, 16 Mai 2017, 17:59:54

Vorheriges Thema - Nächstes Thema

crispyduck

Hallo,

Habe FHEM auf einer Raspi laufen und die configDB auf einer Synology NAS.

Läuft soweit alles super. Bin aber jetzt drauf gekommen das FHEM abstürzt, wenn die DB nicht erreichbar ist. Oder zumindest sobald man das WebIF aufruft.

Habe zwar ein altes Thema dazu gefunden, aber da gab es wohl auch keine Lösung. https://forum.fhem.de/index.php/topic,44031.15.html

Ist dies wirklich immer noch so das sich FHEM komplett verabschiedet wenn die DB nicht erreichbar ist?

Letzte Meldung im Log:
DBI connect('database=configDB;host=10.0.0.11;port=3306','root',...) failed: Can't connect to MySQL server on '10.0.0.11' (111) at configDB.pm line 687.


Danke,
Crispyduck

Benni

#1
Normalerweise wird die Datenbank der configDB beim Start von FHEM eingelesen und verarbeitet (oder bei einem rereadcfg). Genauso wird sie nur geschrieben, wenn man ein save macht. Kritisch sind somit eigentlich nur genau diese beiden Aktionen, denn nur dann wird auf die DB zugegriffen. Wobei im ersten Fall FHEM schon gar nicht erst starten wird.

Der von dir angegebene alte Thread ist übrigens über DbLog, das ist was anderes und hat mit configDB gar nichts zu tun!

betateilchen

Zitat von: Benni am 16 Mai 2017, 18:41:31
Normalerweise wird die Datenbank der configDB beim Start von FHEM eingelesen und verarbeitet (oder bei einem rereadcfg). Genauso wird sie nur geschrieben, wenn man ein save macht. Kritisch sind somit eigentlich nur genau diese beiden Aktionen, denn nur dann wird auf die DB zugegriffen.

Benni schreib doch nicht sowas. Deine Aussage ist schlichtweg falsch.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: crispyduck am 16 Mai 2017, 17:59:54
Ist dies wirklich immer noch so das sich FHEM komplett verabschiedet wenn die DB nicht erreichbar ist?

Ja. Was soll FHEM denn sonst machen, wenn auf die Konfiguration nicht zugegriffen werden kann?

Du solltest besser rausfinden, WARUM die Datenbank auf Deinem NAS nicht erreichbar ist. Das hat vermutlich weder etwas mit FHEM noch mit der configDB selbst zu tun.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Benni

Zitat von: betateilchen am 16 Mai 2017, 18:48:58
Benni schreib doch nicht sowas. Deine Aussage ist schlichtweg falsch.

Ok! Ich hatte fast schon die Befürchtung, dass es nur Halbwissen ist, was ich da habe.
Ziehe meine Aussage somit zurück und lasse mich gerne eines Besseren belehren.

crispyduck

Hallo,

Stimmt, im anderen Thread ging es um DBLog, keine Ahnung warum ich jetzt geglaubt habe das es um configDB ging.

Normalerweise wird die Datenbank der configDB beim Start von FHEM eingelesen und verarbeitet (oder bei einem rereadcfg). Genauso wird sie nur geschrieben, wenn man ein save macht. Kritisch sind somit eigentlich nur genau diese beiden Aktionen, denn nur dann wird auf die DB zugegriffen.

Genau diese Aussage habe ich schon irgendwo gelesen, daher ging ich auch immer davon aus das es nichts macht wenn die DB mal wegen einem NAS Update,... nicht erreichbar ist.

Naja, genau genommen stürzt mir FHEM auch erst ab wenn ich FHEMWEB aufrufe, ist aber auch nicht sehr schön.

Lg
Crispyduck

crispyduck

Zitat von: betateilchen am 16 Mai 2017, 18:52:44
Ja. Was soll FHEM denn sonst machen, wenn auf die Konfiguration nicht zugegriffen werden kann?

Du solltest besser rausfinden, WARUM die Datenbank auf Deinem NAS nicht erreichbar ist. Das hat vermutlich weder etwas mit FHEM noch mit der configDB selbst zu tun.

Warum habe ich eben geschrieben, z.B. ein Update,....

Ist eigentlich egal warum, es wäre schön wenn zumindest einfach reconnects versucht werden.

Wenn das so nicht geht muss ich wohl übers OS überwachen ob FHEM noch läuft und ansonsten neu starten.

Schöner wäre es aber wenn sich FHEM nicht einfach verabschiedet.

Lg
Crispyduck

betateilchen

Zitat von: crispyduck am 16 Mai 2017, 19:00:30
Wenn das so nicht geht muss ich wohl übers OS überwachen ob FHEM noch läuft und ansonsten neu starten.

Das kann Dein Betriebssystem sogar ganz alleine überwachen und neustarten, wenn Du FHEM mit dem ausgelieferten service-File startest.
Damit wird FHEM nach einem Absturz spätestens nach 5 Sekunden neu gestartet.

Es steht in keiner von mir erstellten Dokumentation, dass die configDB während der Laufzeit von FHEM nicht gebraucht wird.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: Benni am 16 Mai 2017, 18:55:04
Ziehe meine Aussage somit zurück und lasse mich gerne eines Besseren belehren.

Denke einfach mal an die Dateien, die während der Laufzeit immer wieder aus der Datenbank gelesen werden müssen (.gplot, .holiday, .layout und viele andere) Und wenn eine dieser Dateien zur Laufzeit verändert wird, z.B. im SVG-Editor, dann wird die Datei auch zur Laufzeit wieder in die Datenbank zurückgeschrieben.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

an die knusprige Ente: kannst Du den Thread bitte mal ins richtige Unterforum verschieben? Danke.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

crispyduck

Zitat von: betateilchen am 16 Mai 2017, 19:09:49
Das kann Dein Betriebssystem sogar ganz alleine überwachen und neustarten, wenn Du FHEM mit dem ausgelieferten service-File startest.
Damit wird FHEM nach einem Absturz spätestens nach 5 Sekunden neu gestartet.

Ich starte FHEM bei mir einfach über das Standard init.d script, habe lediglich folgende Zeile hinzu gefügt um eben beim Start schon zu überprüfen ob auch die DB erreichbar ist:
until nc -z 192.1.1.10 3306; do sleep 5; echo "Waiting for DB to come up..."; do

Wie kann da FHEM automatisch neu gestartet werden?

Zitat von: betateilchen am 16 Mai 2017, 19:12:59
an die knusprige Ente: kannst Du den Thread bitte mal ins richtige Unterforum verschieben? Danke.

Vielleicht blöde Frage; aber wohin? Sonstiges?

Lg,
Crispyduck

betateilchen

es steht doch alles hier im Forum... Das Eingabefeld oben rechts auf jeder Seite ist Suchfeld.

Zitat von: crispyduck am 16 Mai 2017, 19:40:24
Ich starte FHEM bei mir einfach über das Standard init.d script,
Wie kann da FHEM automatisch neu gestartet werden?

https://forum.fhem.de/index.php/topic,54271.0.html

Zitat von: crispyduck am 16 Mai 2017, 19:40:24
Vielleicht blöde Frage; aber wohin? Sonstiges?

https://forum.fhem.de/index.php/topic,13092.0.html
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

crispyduck

Danke!!!
Ja wenn man nach "Service" sucht findet man es auch.  ;D
Dachte erst an watchdog,.... Puh, da hätte ich jetzt wieder unnötig lang rumgebastelt.

Ohne mir, jetzt dein Modul näher angesehen zu haben, gäbe es prinzipiell die Möglichkeit bei nicht erreichen der DB, bzw.  bei einem DBI Fehler nur einen Logeintrag zu generieren und es nach einem Timeout immer wieder zu probieren?

Lg
Crispyduck

Benni

Zitat von: betateilchen am 16 Mai 2017, 19:12:01
Denke einfach mal an die Dateien

Stimmt natürlich! Die Dateien hatte ich gar nicht auf dem Schirm. Ich bin jetzt rein von der Konfiguration ausgegangen. Aber configDB kann ja noch mehr ;)

Danke!

betateilchen

Zitat von: crispyduck am 16 Mai 2017, 20:25:08
Ohne mir, jetzt dein Modul näher angesehen zu haben, gäbe es prinzipiell die Möglichkeit bei nicht erreichen der DB, bzw.  bei einem DBI Fehler nur einen Logeintrag zu generieren und es nach einem Timeout immer wieder zu probieren?

Dazu brauchst Du gar nicht in mein Modul zu schauen, sondern einfach nur mal logisch über das Nachdenken, was Du da gerade fragst.

Wenn die Konfigurationsdatenbank nicht erreichbar ist (im einfachsten Fall beim FHEM Start) gibt es auch noch kein Log-Device, in das man irgendwas loggen könnte. Denn auch das define für das Logfile steht in der Konfiguration.

Nein, ich werde weder einen timeout noch einen reconnect einbauen. Und ausser Dir hatte damit bis heute auch noch nie irgendjemand ein Problem. Wenn Du Deine Datenbank im laufenden Betrieb abschießt, ist das kein Problem, um das ich mich als Entwickler der configDB kümmern will (und auch nicht muss).

Wenn bei Dir der Strom ausfällt, ist das auch nicht mein Problem.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!