93_DbLog blockiert shutdown restart

Begonnen von betateilchen, 03 Februar 2014, 20:10:47

Vorheriges Thema - Nächstes Thema

betateilchen

Originaler Threadtitel war: shutdown restart funktioniert nicht mehr
Wurde geändert, da ein Verdächtiger ermittelt wurde.



Bei einem "shutdown restart" passiert seit neuestem folgendes:


2014.02.03 20:04:51 0: Server shutdown
2014.02.03 20:04:54 1: Including fhem.cfg
2014.02.03 20:04:55 1: telnetPort: Can't open server port at 7072: Die Adresse wird bereits verwendet. Exiting.


und der Neustart wird abgebrochen. Aber es gibt eigentlich nichts ausser fhem, was den Port 7072 verwendet.

Wie kann ich diesem Fehlverhalten auf die Schliche kommen? Von Hand läßt sich fhem problemlos neu starten.

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

betateilchen

ok... Problem erkannt. Die Wartezeit in CommandShutdown($$) ist zu kurz.

Wenn ich in dieser Zeile

      system("(sleep 2; exec $^X $0 $attr{global}{configfile})&");

das sleep von 2 auf 10 ändere, funktioniert alles wieder wie gehabt.

Kann es sein, dass irgendein Modul für das Problem beim Shutdown verantwortlich ist, weil es z.B. sehr lange braucht, um "sich selbst" zu beenden?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#2
Zitat von: betateilchen am 03 Februar 2014, 21:32:37
Kann es sein, dass irgendein Modul für das Problem beim Shutdown verantwortlich ist, weil es z.B. sehr lange braucht, um "sich selbst" zu beenden?

jepp - 93_DbLog ist scheinbar der Übeltäter! Wenn ich DbLog deaktiviere, funktioniert der shutdown auch mit sleep 2 wieder.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Man hat es sich mit dem Verschieben in diese Rubrik mal wieder sehr einfach gemacht... Ich sehe die Verantwortung AUCH in fhem.pl.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

Fhem.pl ist unschuldig: falls ein Modul Probleme beim Shutdown zu loesen hat, sollte ShutdownFn implementieren.

Z.Bsp. mit sleep(10)  :)

betateilchen

Das ist schon klar.

Aber wenn ich in fhem.pl das Problem ebenfalls durch eine minimale Änderung beheben kann, stellt sich einfach die Grundsatzfrage, nach welchen Kriterien die "Wartezeit" von 2 Sekunden festgelegt wurde und ob diese zwei Sekunden die "richtige" Lösung sind ;)

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

betateilchen

Ich bitte um Prüfung und Einbau des angehängten Patches zu 93_DbLog.pm.

Mit diesem Patch wird ein zusätzliches optionales Attribut shutdownWait eingeführt, das eine einstellbare Pause beim fhem-Shutdown ermöglicht, um eine korrekte Beendigung vor dem Versuch eines Neustarts sicherzustellen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

ich habe noch nicht verstanden was das mit dem Port 7072 zu tun hat??

Ist das "alte" fhem noch online und das neue "fhem" will schon starten? Warum wartet dann das neue fhem nicht bis das alte sich beendet hat? Oder habe ich etwas falsch verstanden?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

Zitat von: Tobias am 04 Februar 2014, 13:11:04Ist das "alte" fhem noch online und das neue "fhem" will schon starten?

so stellt es sich dar.

Zitat von: Tobias am 04 Februar 2014, 13:11:04Warum wartet dann das neue fhem nicht bis das alte sich beendet hat?

Weil ein solches explizites Warten im shutdown Prozess nicht vorgesehen ist, schau Dir in fhem.pl die CommandShutdown an.
Dort werden zuerst alle von Modulen registrierten ShutdownFn nacheinander aufgerufen, dann wird fhem beendet, zwei Sekunden gewartet und der Neustart durchgeführt.

93_DbLog hatte bis jetzt aber keine ShutdownFn und das führt offenbar zu einer Blockade.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Ist denn schon darüber entschieden, ob bzw. wann die vorgeschlagene ShutdownFn nebst Attribut in 93_DbLog implementiert wird?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Tobias

Ist schon im Test eingebaut. Aber noch nicht eingecheckt.
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

betateilchen

Noch einen Hinweis zum Modul:

Wenn man eine sql-Verbindung definiert, und das zugehörige dbd-perl-Modul ist nicht installiert, stürzt fhem sang- und klanglos beim Verbindungsaufbau ab. Könnte man evtl. mit eval abfangen und eine Fehlermeldung ausgeben, oder zumindest einen Log-Eintrag schreiben.

Fiel mir grade auf, als ich das Logging mit mySql testen wollte anstatt mit sqlite  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

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