FHEM über systemd mit Watchdog und sd_notify

Begonnen von a-p-s, 03 März 2018, 23:05:27

Vorheriges Thema - Nächstes Thema

skynet

Ich habe das Ding auch gerade mal getestet, ist ja eingecheckt ;-)
Aber mit den Standards haut es mit den FHEM ständig um die Ohren ...

freddeh

#16
Hatte erst das gleiche Problem. Bei mir hat es schließlich geklappt über das Script und den Angaben in der commandref. Ich hatte leider einen mix aus Type=forking und dem Attribut nofork 1 gewählt, weil ich den Post falsch gelesen hatte.

TheTrumpeter

Ich muss den alten Thread mal aufwärmen...

Bin gerade dabei meine Uralt-FHEM-Installation (Raspbian) auf eine neue Basis zu bringen. Bei der Gelegenheit überlege ich auch meinen selbst geschnitzten "Watchdog" zu ersetzen. Dabei ist mir dieser Thread (bzw. das Modul) aufgefallen.
Aus der Commandref werde ich aber leider nicht so richtig schlau.

Meine "eigene" Lösung (die wahrscheinlich auch auf irgendeinem Thread hier basiert, den ich nur nicht mehr finde...) besteht aus einem "at", das periodisch ein "touch" auf eine Datei auf einer RAM-Disk macht.
Ein Shell-Skript, das beim Systemstart gestartet wird, wertet das Alter dieser Datei aus und reagiert entsprechend:
  • Beim Überschreiten der 1. Schwelle wird versucht FHEM zu beenden und neu zu starten.
  • Beim Überschreiten der 2. Schwelle wird der FHEM-Prozess gekillt und neu gestartet.
  • Beim Überschreiten der 3. Schwelle sollte der Linux-Watchdog den Server neu starten (das funktioniert grad nicht mehr, ich glaube ich hab' das irgendwann mal deaktiviert)
Zusätzlich sorgt ein Eintrag in der crontab dafür, dass die Datei beim Neustart mal ge"touch"t wird, um in keiner Reboot-Schleife zu landen.

Ich habe zur Fehlerbehandlung eines unwahrscheinlichen Fehlers meiner Wärmepumpe ein selbst geschriebenes Modul, das FHEM über mehrere Minuten "blockiert". Ich habe damals keine andere Lösung dafür gefunden. Da der Fehler aber hoffentlich nie eintritt, ist mir das egal. In dem Modul rufe ich den "touch"-Befehl ebenfalls auf, sodass der Watchdog in dem Fall nicht zuschlägt.


Kann ich das mit dem "systemd_watchdog" auch realisieren?
Wie muss die "systemd service facility" konfiguriert werden?
FHEM auf RPi3, THZ (LWZ404SOL), RPII2C & I2C_MCP342x (ADCPiZero), PowerMap, CustomReadings, RPI_GPIO, Twilight, nanoCUL (WMBus für Diehl Wasserzähler & Regenerationszähler für BWT AqaSmart), ESPEasy, TPLinkHS110