FHEM hängt - Fix bzw. Workaround gesucht

Begonnen von fritz, 09 Oktober 2013, 13:07:04

Vorheriges Thema - Nächstes Thema

fritz

Hallo,

punkt 4:00 Uhr heute nacht (genauer: nach Behandlung der ersten nach 04:00 Uhr eingetroffenen Nachricht) stellte FHEM seinen Dienst ein, wobei die Task selbst aktiv blieb. Es wurden aber keine Ereignisse mehr registriert und verarbeitet. Ich vermute, dass fhem.pl in irgendeine Endlosschleife oder einen Deadlock geraten ist.
Es gibt keine für 04:00 Uhr definierten Ereignisse in meiner Konfiguration, auch nicht in der Heizungssteuerung (nur, weil ich im Forum ähnliches in Verbindung mit einem at...[/font] fand). Es gibt aber Hinweise im Forum darauf, dass dies mit der Kommunikation von FHEM zusammenhängen kann, weshalb ich den Fehler an der Schnittstelle FHEM-HMLAN (eine andere habe ich nicht) vermute.
Weder auf dem Server (/var/log/messages) noch im Kommunikationssystem (FritzBox) wurden zur fraglichen Zeit besondere Ereignisse registriert. Dennoch habe ich die Vermutung, dass die "runde" Zeit kein Zufall war: ich hatte einen ähnlichen Effekt bereits Mitte September einmal, damals war es aber 04:30 Uhr.

* Lässt sich ein laufendes Perl-Program so stoppen oder anhalten, dass man sieht, wo sich die Abarbeitung gerade befindet (oder dass man sich im Nachhinein per Debugger mit dem Programm beschäftigen kann?)
* Wenn es wegen der Seltenheit des Ereignisses erst einmal keinen Fix gibt, wie könnte ein Workaround aussehen? Ich bin nämlich von Zeit zu Zeit mehrere Tage nicht zu Hause und da wäre es sehr ungünstig, wenn ausgerechnet dann FHEM stehen bliebe. Die Bude würde kalt werden (oder heiß - je nach aktuellem Status). Sicher ließen sich die Log-Dateien von außen überwachen, dann bleibt aber noch immer das Problem, dass das Programm auf fhem.pl 7072 "shutdown" nicht reagiert, weil es anscheinend ja "normal" läuft.
* Gibt es eine andere Möglichkeit, fhem.pl von außen zu stoppen ohne erst umständlich die PID zu ermitteln?

Danke im Voraus

<F>

betateilchen

Zitat von: fritz schrieb am Mi, 09 Oktober 2013 13:07* Gibt es eine andere Möglichkeit, fhem.pl von außen zu stoppen ohne erst umständlich die PID zu ermitteln?

Ich weiss zwar nicht, was an der Ermittlung einer Prozess-ID umständlich ist, aber ja, es geht auch ohne:

pkill -9 perl

Vorausgesetzt, Du hast keinen anderen Services laufen, die perl starten.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Mr. P

@betateilchen: du weißt aber schon, dass es eine Unart ist, Prozesse mit -9 einfach abzuschießen. Sonst beendest du ein Programm doch auch normal und terminierst es nicht auf die brutale Art.

Und wie ich (und ggf. was sonst noch) fhem mit pkill beende, kommt darauf an, wie man fhem startet.
Auf meinem Raspberry kann ich fhem auch ganz normal über pkill stoppen und muss nicht den Umweg über perl gehen.
Grund dafür ist allerdings nicht mein Raspberry oder das darauf laufende Debian sondern vielmehr, dass ich meinem fhem in der Konfiguration ein PID-File anlegen lasse:

attr global pidfilename /var/run/fhem.pid

und schon lässt es sich normal mit 'pkill fhem' sauber beenden.

@fritz: mit einem zB: 'pgrep fhem' oder 'pgrep perl' kannst du einmal nachsehen, was dir pkill so alles beenden würde.
Greetz,
   Mr. P

fritz

Zitat von: betateilchen schrieb am Mi, 09 Oktober 2013 13:11Ich weiss zwar nicht, was an der Ermittlung einer Prozess-ID umständlich ist...
Umständlich ist, dass ich u.U. nicht da bin, wenn das (noch zu schreibende) Überwachungsscript feststellt, dass FHEM streikt.
Zitat... aber ja, es geht auch ohne: ... Vorausgesetzt, Du hast keinen anderen Services laufen, die perl starten.
Muss ich prüfen, danke. pkill -f -9 fhem.plfunktioniert etwas gezielter - und könnte man wahrscheinlich gleich dazu verwenden, auch den "korrekten" Abbruchversuch (s.o.) zu killen.

<F>

P.S.: Ein Workaround ist also machbar, nun müssen wir nur noch herausbekommen, was eigentlich passiert und wie wir das verhindern.
Edit: Hat sich mit Mr. P's Ergänzungen überschnitten. Klar ist pkill nur letztes Mittel.

fritz

Zitat von: Mr. P am 09 Oktober 2013, 13:34:53
..., dass ich meinem fhem in der Konfiguration ein PID-File anlegen lasse:

attr global pidfilename /var/run/fhem.pid

und schon lässt es sich normal mit \'pkill fhem\' sauber beenden.

Gute Idee, der erste Versuch endete aber mit einem nicht-laufendem FHEM - und im Output-File fand ich die lakonische Mitteilung:
/var/run/fhem.pid: Keine Berechtigung
Sooo einfach scheint es also nicht zu gehen.

(Ich werde meinen Überwacher erst mal das schon erwähnte pkill -f..., gefolgt von /etc/init.d/fhem start machen lassen - sogar ohne vorher ein "normales" Herunterfahren zu versuchen, weil auch das im Fehlerfall hängen bleibt. Wichtig ist ja nur, dass es danach garantiert wieder läuft.)

Schönes Wochenende

<F>

P.S.: Das neue Forum sieht gut aus, danke den Machern.