FHEM Prozessüberwachung [gelöst]

Begonnen von Larusso, 27 November 2020, 14:34:43

Vorheriges Thema - Nächstes Thema

Larusso

Hallo zusammen,

ja ich weis es gibt viele Beiträge zu dem Thema, leider hat mir keiner dabei geholfen mein Problem zu lösen.....vielleicht sieht jemand den Fehler den ich gemacht habe.

Mein FHEM startet alle 10min. neu, obwohl der Prozess läuft und auch der Zeitstempel geschrieben wird. Ich habe diese Anleitung:

https://www.computerhilfen.de/info/fhem-stuerzt-ab-so-prueft-man-ob-das-system-noch-laeuft-oder-startet-neu.html

benutzt und es wird auch eine Zahl die fortlaufend ist (jede Sekunde zählt die Zahl einmal hoch)

in der Datei fhem_timestamp.txt steht folgender Wert drinn:

1606483200

Anbei noch das define was genauso in dem Toturial steht:

defmod FHEM_Online at +*00:10:00 {\
open(TIMESTAMPDATEI, ">/home/pi/fhem_timestamp.txt");;\
print TIMESTAMPDATEI "".time()."";;\
close(TIMESTAMPDATEI);;\
}
attr FHEM_Online alignTime 00:00

setstate FHEM_Online Next: 14:40:00
setstate FHEM_Online 2020-11-27 14:30:00 state Next: 14:40:00





nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

betateilchen

den Fehler musst Du ausserhalb von FHEM suchen, an der Stelle, an der die von FHEM geschriebene Datei gelesen und ausgewertet wird.

Abgesehen davon finde ich das in der zitierten Anleitung beschriebene Vorgehen komplett absurd und umständlich.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Larusso

Hallo betateilchen,

vielleicht hast du ja einen Sinnigeren Ansatz für mich den ich verfolgen kann? Was mir komisch vorkommt ist das nur eine fortlaufende Zahl geschrieben wird, was erwartet der PHP Code:

<?php
$aktuell 
time();

// FHEM Timestamp aus Datei einlesen
$fhem_timestamp file('fhem_timestamp.txt'FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES);
$fhem_timestamp $fhem_timestamp[0];

echo 
'$fhem_timestamp: '.$fhem_timestamp."\n";

// Pruefen, ob Timestamp in Datei vorhanden
if(!isset($fhem_timestamp)) { $fhem_timestamp 0; }

// Ueberpruefen: Wenn geschriebene Variable vor mehr als 30 Minuten aktualisiert...
if($aktuell > ($fhem_timestamp 1800)) {

// Datei ist aelter - FHEM scheint abgestuerzt - Reboot!
exec('sudo service fhem stop');
exec('sudo service fhem start');

}
?>


denn für einen Zeitwert?

Ansich fan ich die Lösung recht einfach gestaltet, allerdings verstehe ich nicht mit welchem Wert die Zeit verglichen wird?

Woher weis das System denn das es dreissig Minuten her ist? Nur anhand der letzten Änderung an der Datei oder an der Zählerdifferenz?

// Ueberpruefen: Wenn geschriebene Variable vor mehr als 30 Minuten aktualisiert...
if($aktuell > ($fhem_timestamp + 1800))


nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

Wernieman

Auf was für ein System lässt Du den fhem laufen?

z.B. wenn es ein systemd-System ist, geht es mit Bordmitteln viel eleganter und sicherer .... kann ansonsten betateilchen nur zustimmen ...

Außerdem:
Du solltest Du Grund finden, WARUM fhem sich beendet und den lösen. Mit diesem Vorgehen löst Du nur die Symptome und nicht die Ursache
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

MadMax-FHEM

#4
Schließe mich an... ;)

Trotzdem kurz Antwort auf die Frage:

fhem schreibt per 10min at die aktuelle Uhrzeit in die "/home/pi/fhem_timestamp.txt" Datei.

Allerdings fraglich, ob der User fhem überhaupt in eine Datei im Verzeichnis des User pi schreiben darf...

Und das php-Dingens prüft ebenfalls zyklisch per cron, ob die eingetragene Uhrzeit älter als 30min ist.

EDIT: wobei im php kein absoluter Pfad sondern nur der Dateiname angegeben ist. Wenn also der ausführende User des cron zu der Zeit nicht "zufällig" in /home/pi/ "steht" wird wohl auch neu gestartet. Weil: aktuelle zeit (in Sekunden seit...) ist wohl größer als 0 + 1800. Und es wird auf 0 gesetzt, wenn beim Lesen etwas nicht geklappt hat... (so ich das php-Zeugs verstehe)...

Wenn ja: Neustart...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Larusso

danke für die schnelle info,

klar über das Thema Fehler finden und beseitigen brauchen wir nicht sprechen.......aber nichts desto trotz bleiben wir mal bei meiner Anfrage :)

ZitatAllerdings fraglich, ob der User fhem überhaupt in eine Datei im Verzeichnis des User pi schreiben darf...
Also der User fhem hat die Rechte so bekommen das in die Textdatei geschrieben werden kann, das habe ich überprüft.

Allerdings finde ich den Ansatz von MadMax-FHEM interessant
ZitatEDIT: wobei im php kein absoluter Pfad sondern nur der Dateiname angegeben ist. Wenn also der ausführende User des cron zu der Zeit nicht "zufällig" in /home/pi/ "steht" wird wohl auch neu gestartet. Weil: aktuelle zeit (in Sekunden seit...) ist wohl größer als 0 + 1800. Und es wird auf 0 gesetzt, wenn beim Lesen etwas nicht geklappt hat... (so ich das php-Zeugs verstehe)...

wie kann man das ändern?

ZitatAuf was für ein System lässt Du den fhem laufen?
nicht erschlagen......keine Ahnung.... ich starte mein fhem mit service fhem start/stop/status..... :P

Boardeigene Mittel wären super, kann man keinen service anlegen der den eigentlichen Prozess
perl und fhem.pl
überwacht und diesen dann neustartet?
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

micky0867

Wenn fhem von selbst neu startet, brauchst du doch keine Überwachung, oder?
Du solltest rausfinden, warum fhem neu startet.
Meist sind es timeouts bei Zugriffen auf andere Systeme.

betateilchen

ich glaube, wir werden hier bald Popcorn brauchen...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

@betateilchen: Wir sollten ein Abo für Popcorn abschließen

@Larusso
Es ist doch bestimmt ein Linux-System?
Gib uns mal folgende Ausgabe (auf der shell):
cat /etc/debian_version

Und warum für so triviales wie auf Dateidatum ein PHP-Script verwenden? Geht doch viel besser mit Bordmitteln (Shell)
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Larusso

ZitatWenn fhem von selbst neu startet, brauchst du doch keine Überwachung, oder?
FHEM startet nicht automatisch neu.

Ok, auch wenn ich das vermeiden wollte.... ich teste halt viel an meinem System und einige Fehler die dazu führen das der FHEM Prozess einfriert, abstürzt wie auch immer passieren nicht immer direkt nach dem ich etwas angelegt oder geändert habe. Ich merke das immer erst dann wenn morgens Früh irgendeine Lampe noch an ist die eigentlich automatisch aus sein sollte (nur ein Bsp.). Den Fehler suchen und finden ist natürlich wichtig, aber wenn ich von 14-22Uhr auf der Arbeit bin und keine Zeit habe mich per VPN in meinem Heimnetz um den Fehler zu kümmern der dazu führt das mein FHEM nicht mehr läuft dann springt mir meine liebe Frau schon mal an den Hals weil unter Umständen dann einige Sachen gar nicht mehr gehen.

Aus dem Grund suche ich nach einer schnellen Lösung um FHEM erst einmal wider zum laufen zu bekommen. Es ist auch schön das man immer solche Sachen diskutieren muss wenn man nur ein bisschen Support benötigt, echt schade. Entweder man bekommt den Standartsatz "lies dir mal die command ref durch" oder es wird um die Anfrage herum angefangen zu diskutieren.

Gut ich habe jetzt erst einmal den Hardware Watchdog vom Raspberry genutzt mit einer Datei die durch ein at in fhem beschrieben wird und der Watchdog überprüft den Timestamp der Datei, nicht den Inhalt. Ist nicht ganz die Lösung die ich haben wollte weil der Watchdog den kompletten Raspberry neustartet, aber es funktioniert erst mal.

Wenn jemand mir bei dem Problem fhem prozess Neustart helfen kann oder möchte freu ich mich natürlich über Support.


??? Aber ich will ja auch nicht nur meckern, hier im Forum wurde mir schon sehr häufig auch schnell und unklompliziert geholfen, dafür möchte ich mich auch einmal bei allen bedanken. Es sind halt viele Nutzer hier unterwegs die das mit Händen und Füßen probieren und nicht die große Ahnung von perl oder python haben, so wie ich. Ich hangel mich meistens durch ANleitungen oder ändere Codesnippets für meine Bedürfnisse ab, das funktioniert nun mal nicht immer so wie es soll. :D

ZitatGib uns mal folgende Ausgabe (auf der shell):
9.13
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

micky0867

Zitat von: Larusso am 27 November 2020, 14:34:43
Mein FHEM startet alle 10min. neu, obwohl der Prozess läuft und auch der Zeitstempel geschrieben wird. Ich habe diese Anleitung:

was habe ich hieran nicht verstanden?
Ich weiß nicht, warum es so schwer ist, sich klar auszudrücken.

Ich habe in meiner /etc/init.d/fhm den Abschnitt

'status')
        DATA="$(echo 'list WEB PORT' | /usr/bin/socat -t60 - TCP:127.0.0.1:7072 2>/dev/null 2>/dev/null)"
        echo "$DATA" | grep "8083" >/dev/null 2>&1
        RETVAL=$?
        if [ $RETVAL -eq 0 ] ; then
                echo "fhem is running"
        else
                echo "fhem is not running"
        fi
        ;;

eingefügt.

Ein Cronjob unter root ruft regelmäßig "/etc/init.d/fhem status" auf und prüft, ob die Ausgabe "fhem is running" ist.
Ist dem nicht so, wird ein "/etc/init.d/fhem restart" ausgeführt.

restart')
        echo "Restarting fhem..."
        pkill -U fhem perl
        sleep 3
        /usr/bin/perl fhem.pl fhem.cfg
        RETVAL=$?
        ;;

Wobei ich nicht mehr weiß, ob restart im Standard enthalten ist.





Larusso

nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,

MadMax-FHEM

#12
Also, sorry war unterwegs... ;)

Nachdem ich noch mal gelesen habe wird ja fhem alle 10 min neu gestartet.
Ich denke das liegt eben daran (u.U.) dass eben beim Auslesen des php Scripts etwas nicht passt und dann der Vergelich zum Neustart führt...

Somit ist die "Überwachung" wie sie ist ja eher "kontraproduktiv" ;)

1. prüfen, ob in der Datei /home/pi/fhem_timestamp.txt auch tatsächlich immer die aktuelle Zeit in (vermutlich) Sekunden seit 1970 steht.

2. dann das php umbauen, dass eben derselbe Pfad/Datei genommen wird.


$fhem_timestamp = file('fhem_timestamp.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

umbauen in:

$fhem_timestamp = file('/home/pi/fhem_timestamp.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);


Sofern ich das php richtig verstehe.
Evtl. auch mal das php-Script mit sudo (da ja cron als root ausgeführt wird!?) auf der Console aufrufen, da dann ja die Ausgabe des ausgelesenen Zeitwertes erfolgt und gepfüft werden kann...



DANN: die Überwachung bzgl. Service-Status ist nat. eine andere Qualität als die aktuelle Prüfung mittels Datei-Schreiben und Prüfen (sofern diese sauber funktionieren würde ;) ).

Weil aktuell ja nicht nur geprüft wird ob der Service noch läuft, das würde ja schon "positiv" zurückgeben, wenn der Prozess noch läuft.

Mit der aktuellen Lösung (Datei schreiben/prüfen) wird ja auch kontrolliert, dass fhem noch "was tut"...

Nur meine Meinun(en)...

EDIT: ok, zu schnell "überflogen". Sorry @micky0867: du machst ja mehr als nur den Service-Status prüfen ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Wernieman

Was soll eigentlich der Unterschied zwischen "Datei-Timestamp" und "Inhalt der Datei" sein? Würde mich persönlich sogar eher auf den Datei-Timestamp verlassen ...

Bei der Lösung von micky0867 sollte man ergänzend Hinweisen, das ein "TELNET-Device" definiert sein muß. Hatten wir hier auch im Forum schon mehrfach ...

@Larusso
Wegen Deiner Kritik an den Antworten:
Bitte berücksichtige, das die meisten hier im Forum freiwillig und privat sind. Speziell wenn man ein "Suche mal im Forum" liest, sollte man nachdenken, das schon dieser Hinweis private Zeit kostet. Diverse andere nehmen sich mittlerweile nicht die Zeit es zu schreiben, sondern helfen lieber anderen.

Wegen Version:
Du solltest irgendwann planen, Deinen PI upzudaten. Aktuell ist die 10 und dort würde Dir der systemd bei passender Konfiguration fhem überwachen
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Larusso

Hallo MadMax-FHEM,

ich habe deinen Ansatz mal genommen und ausprobiert:
ZitatSomit ist die "Überwachung" wie sie ist ja eher "kontraproduktiv" ;)

1. prüfen, ob in der Datei /home/pi/fhem_timestamp.txt auch tatsächlich immer die aktuelle Zeit in (vermutlich) Sekunden seit 1970 steht.

2. dann das php umbauen, dass eben derselbe Pfad/Datei genommen wird.

Code: [Auswählen]
$fhem_timestamp = file('fhem_timestamp.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
umbauen in:
Code: [Auswählen]
$fhem_timestamp = file('/home/pi/fhem_timestamp.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

Sofern ich das php richtig verstehe.
Evtl. auch mal das php-Script mit sudo (da ja cron als root ausgeführt wird!?) auf der Console aufrufen, da dann ja die Ausgabe des ausgelesenen Zeitwertes erfolgt und gepfüft werden kann...

wenn ich den Pfad für die fhem_timestamp datei konkret angebe so wie du es geschrieben hast dann wird der Prozess von fhem nicht mehr alle 10min Neu gestartet. Leider kommt der Neustart dann alle 30min. php scheint immer im obersten Ordner zu suchen soweit kein Pfad angegeben ist, somit denke ich das durch die Pfadangabe die Datei jetzt gefunden wird, allerdings verstehe ich nicht warum jetzt alle 30min. der Prozess gestartet wird......
nanoCul434MHz, nanoCul868MHz, HueBridge, shellyRolladenaktoren, Nuki, Homematic, RPI3, Homebridge, Sonoffbridge, Xiaomi Saugrobotter,