Autor Thema: Modul zum senden von keep-alive Meldungen an systemd (watchdog)  (Gelesen 966 mal)

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Aus der Idee aus dem Forum (https://forum.fhem.de/index.php/topic,85231.0.html) entstanden und nach einer Testphase ins Repo eingecheckt (ab morgen per Update).

Das Modul erlaubt (mit einem passenden systemd-Script) eine Überwachung von FHEM mit Linux-systemd-Mitteln. Wird sich die FHEM-Instanz nicht innerhalb einer definierten Zeit melden (in Folge eines Abstutzes, 'Hängers' etc.), wird FHEM von systemd automatisch beendet und neu gestartet. Damit wird das System ein wenig robuster im Dauerbetrieb. Dennoch sollte man den Fällen, in denen der Watchdog zuschlägt, tunlichst nachgehen und die Problemursachen beseitigen.

Damit das funktioniert, muss FHEM unter der Kontrolle von systemd laufen und der Watchdog muss korrekt konfiguriert sein.
Folgendes Script kann dafür benutzt werden:
[Unit]
Description=FHEM Home Automation
Requires=network.target
#After=network.target
After=dhcpcd.service

[Service]
Type=forking
NotifyAccess=all
User=fhem
Group=dialout
# Run ExecStartPre with root-permissions
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir /var/run/fhem
ExecStartPre=/bin/chown -R fhem:dialout /var/run/fhem
# Run ExecStart with defined user and group
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
#ExecStart=/usr/bin/perl fhem.pl configDB
TimeoutStartSec=240
TimeoutStopSec=120
#ExecStop=/usr/bin/pkill -U fhem perl
ExecStop=/usr/bin/pkill -f -U fhem "fhem.pl fhem.cfg"
# Restart options: no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, or always.
Restart=on-failure
RestartSec=3
WatchdogSec=180
PIDFile=/var/run/fhem/fhem.pid

[Install]
WantedBy=multi-user.target
Das Script kann unter "/etc/systemd/system/fhem.service" angelegt werden.
Mit "sudo systemctl daemon-reload" wird sysgtemd-Konfiguration erneuert.
Anschliessend kann FHEM mit folgendem Befehl gestartet werden: "sudo systemctl start fhem.service".
Wenn in dem Script "Type=notify" verwendet wird, muss global Attribute "nofork=1" gesetzt sein.
attr global nofork 1Bei "Type=forking" muss in Script der korrekte Pfad zu dem PID-Datei angegeben werden, diese Datei muss auch in FHEM mit dem global Attribute "pidfilename" aktiviert sein.
attr global pidfilename /var/run/fhem/fhem.pid
Die Definition für das Modul in FHEM ist sehr simpel und sollte vor dem aktivieren von Watchdog erstellt werden (save nicht vergessen!)

define <name> systemd_watchdog
Das war's auch schon. Viel Erfolg!

In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z
Gefällt mir Gefällt mir x 1 Liste anzeigen

Offline wibi_

  • New Member
  • *
  • Beiträge: 38
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #1 am: 22 August 2018, 18:14:35 »
Servus,
vielen Dank für das Modul und die Anleitung! Ist genau das was ich gesucht habe, nachdem mein Garten einige Tage während meiner Abwesenheit trocken geblieben ist.

Etwas ist mir noch aufgefallen: Kann es sein, dass ein "shutdown restart" im FHEM Eingabefenster jetzt nur noch den Shutdown macht?
Ist aber eigentlich kein Prolem, wenn man das weiß. Kann ja FHEM auch wieder mit systemctl starten oder einfach einen reboot machen.

Gruß
RPI3, RPI2, Synology 212+ DSM 6.2, fhem 5.8, CULV3_FS20, CULV3_HM, CULV3_RFR, Homematic, FS20, 1-Wire, ESPEasy

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #2 am: 22 August 2018, 22:00:58 »
Moin, moin,

wie beschrieben, die Idee und die Funktionalität ist nicht von mir, ich habe nur das Ganze etwas bequemmer in ein Modul verpackt. Aber ich freue mich natürlich, dass das Modul jemandem nützlich ist :)
Bin dennoch kein Experte, was systemd angeht.
Bei mir verhält sich etwas anders. Egal, ob 'shutdown', oder 'shutdown restart', FHEM wird beendet und sofort vom systemd neu gestartet. Stört mich nicht weiter, soll ja auch immer laufen. Beenden kann ich auch mit systemctl.
Läuft bei Dir das Modul sonst wie gewünscht? Nach Abschuss von FHEM, nach deaktivieren/löschen des Modulinstanz oder nach einem simulierten Hänger startet nach der Wartezeit brav neu?
Arbeitest du mit forking oder mit notify?

Grüße
Alexander
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline wibi_

  • New Member
  • *
  • Beiträge: 38
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #3 am: 24 August 2018, 19:44:18 »
Hallo Alexander,

bin leider auch kein systemd - Experte. Ich habe fhem.service mit Type=forking und dem von mir oben beschriebenen Verhalten laufen.
Habe zwischenzeitlich auch mal mit Type=oneshot und RemainAfterExit=yes, sowie mit ExecReload=... wie hier beschrieben https://forum.fhem.de/index.php/topic,25706.0.html experimentiert - brachte aber auch nicht den gewünschten Erfolg.
Nach dem Abschuß (kill) von FHEM funktioniert alles wunderbar.
Was mich allerdings interessieren würde ist, wie ich einen Hänger von FHEM simulieren kann? Damit habe ich mich noch überhaupt nicht beschäftigt. Bin froh, wenn's läuft...

Gruß Harry

RPI3, RPI2, Synology 212+ DSM 6.2, fhem 5.8, CULV3_FS20, CULV3_HM, CULV3_RFR, Homematic, FS20, 1-Wire, ESPEasy

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #4 am: 24 August 2018, 20:17:06 »
Was mich allerdings interessieren würde ist, wie ich einen Hänger von FHEM simulieren kann? Damit habe ich mich noch überhaupt nicht beschäftigt.

Nichts leichter als das ;D
sleep 300
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline wibi_

  • New Member
  • *
  • Beiträge: 38
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #5 am: 25 August 2018, 14:17:40 »
Hallo Alexander,

nach einigem Testen funktioniert das bei mir jetzt auch mit dem "sleep-Hänger". Ein Problem hatte ich mit der ExecStop Zeile der Unit. Diese lief bei mir auf einen Fehler.
Nachdem ich ExecStop wie folgt geändert habe, funktioniert der Watchdog jetzt auch beim sleep:

ExecStop=/usr/bin/pkill -f -x fhem.pl
Und wenn die ExecStartPre - Zeile noch um ein -p ergänzt wird, unterdrückt das die Fehlermeldung, wenn das Verzeichnis /var/run/fhem schon existiert - ist aber nur Kosmetik.

ExecStartPre=-/bin/mkdir -p /var/run/fhem
Danke nochmal für dieses Modul und deine Arbeit!

Gruß Harry


RPI3, RPI2, Synology 212+ DSM 6.2, fhem 5.8, CULV3_FS20, CULV3_HM, CULV3_RFR, Homematic, FS20, 1-Wire, ESPEasy

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #6 am: 25 August 2018, 20:21:17 »
Gute Idee mit mkdir mit -p !
Danke, habe Commandref entsprechend geändert.
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline Edi77

  • Full Member
  • ***
  • Beiträge: 403
  • Der Weg ist das Ziel
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #7 am: 04 Dezember 2018, 18:44:37 »
Ich hätte da mal noch eine Frage

Irgendwo habe ich hier mal gelesen das unter ./contrib/init-scripts/fhem.service existieren würde, was bei mir nicht so ist.
Dann habe ich mal geschaut wo überall die fhem.service auf meinem liegt

root@ubuntu-FHEM:/# find -name fhem.service
./run/systemd/generator.late/graphical.target.wants/fhem.service
./run/systemd/generator.late/multi-user.target.wants/fhem.service
./run/systemd/generator.late/fhem.service
./var/lib/lxcfs/cgroup/pids/system.slice/fhem.service
./var/lib/lxcfs/cgroup/blkio/system.slice/fhem.service
./var/lib/lxcfs/cgroup/devices/system.slice/fhem.service
./var/lib/lxcfs/cgroup/cpu,cpuacct/system.slice/fhem.service
./var/lib/lxcfs/cgroup/memory/system.slice/fhem.service
./var/lib/lxcfs/cgroup/name=systemd/system.slice/fhem.service
./sys/fs/cgroup/pids/system.slice/fhem.service
./sys/fs/cgroup/blkio/system.slice/fhem.service
./sys/fs/cgroup/devices/system.slice/fhem.service
./sys/fs/cgroup/cpu,cpuacct/system.slice/fhem.service
./sys/fs/cgroup/memory/system.slice/fhem.service
./sys/fs/cgroup/systemd/system.slice/fhem.service
./sys/fs/cgroup/unified/system.slice/fhem.service

Daher die Frage, ist "/etc/systemd/system/fhem.service" das immer noch der richtige Ort?

Master FHEM 5.8 als VM auf ESX mit Mint Linux/Ubuntu 18.04 LTS mit CUNO868/MAX! Cube | RPi 1 ser2net COC | HMUARTLGW | Orange Pi SMAspot via Bluetooth an Solarwechselrichter & Stromzähler | RPi mit GammaScout,nanoCUL868 | MQTT mit EasyESP 8266 | LuftdatenInfo | 3D PRINTER RAISE3D

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #8 am: 04 Dezember 2018, 19:10:07 »
systemd kann selbst den script an die richtige Stelle verlinken. Habe ein wenig dazu schon mal geschrieben http://s6z.de/cms/index.php/homeautomation-homecontrol/softwareplattformen/fhem/142-fhem-watchdog-mit-systemd
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

Offline carlos

  • Full Member
  • ***
  • Beiträge: 212
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #9 am: 06 Dezember 2018, 17:31:12 »
Hallo,
Ich habe mr den Watchdog jetzt auch mal eingerichtet.
Ich kriege jetzt aber gar nicht mit ob und wann der watchdog zugeschlagen hat.
Im log sieht man es schon, aber wenn man das im watchdog device noch sehen könnte wäre cool.
Ist das machbar?
Gruß
Carlos
FHEM svn auf Gigabyte BRIX,1 UDOO, 3 Raspberry Pi, signalduino, nanoCUL, div. Homematic Komponenten, toom Baumarkt Funksteckdosen, einige sonoffs, hue

Offline Edi77

  • Full Member
  • ***
  • Beiträge: 403
  • Der Weg ist das Ziel
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #10 am: 06 Dezember 2018, 17:37:36 »
Du kannst dir z.B. eine EMail schicken lassen  ;)

define SendMail_fhemstart notify global:INITIALIZED|REREADCFG sleep 30;; {DebianMail('aaaa@bbbbb.com','>>>>> FHEM REBOOT <<<<<','>>>>> FHEM REBOOT <<<<<')}
Master FHEM 5.8 als VM auf ESX mit Mint Linux/Ubuntu 18.04 LTS mit CUNO868/MAX! Cube | RPi 1 ser2net COC | HMUARTLGW | Orange Pi SMAspot via Bluetooth an Solarwechselrichter & Stromzähler | RPi mit GammaScout,nanoCUL868 | MQTT mit EasyESP 8266 | LuftdatenInfo | 3D PRINTER RAISE3D

Offline hexenmeister

  • Developer
  • Hero Member
  • ****
  • Beiträge: 4315
    • tech_LogBuch
Antw:Modul zum senden von keep-alive Meldungen an systemd (watchdog)
« Antwort #11 am: 06 Dezember 2018, 22:08:30 »
Ich kriege jetzt aber gar nicht mit ob und wann der watchdog zugeschlagen hat.
Im log sieht man es schon, aber wenn man das im watchdog device noch sehen könnte wäre cool.
Ist das machbar?

Schwierig. Man kann natürlich den Startzeitpunkt protokollieren. Aber den Grund nicht wirklich zuverlässig. Wenn der WD zuschlägt, wird FHEM hart beendet (weil ja eh vermutlich schon hängt). Da kann man schlecht etwas zuverlässig speichern.
In Verwendung: HM, EnOcean, 1wire, Firmata, MySensors, ESPEasy, MQTT*, NodeRED, Alexa, Telegram,..
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy
Kaffeekasse: https://www.paypal.me/s6z

 

decade-submarginal