Ich habe jetzt endlich Zeit genommen, meine alte Bastelei (http://s6z.de/cms/index.php/homeautomation-homecontrol/softwareplattformen/fhem/23-fhem-watchdog) über Bord zu werfen. Moderne Linux-Systeme verwendet systemd, der kann das besser out-of-the-box.

Nachdem ich im Forum eine gute Vorlage (https://forum.fhem.de/index.php/topic,85231.msg775822.html#msg775822) gefunden habe, erstelte ich kurzerhand daraus ein leicht zu verwendendes Modul. Zu finde ist wie immer im GitHub: https://raw.githubusercontent.com/hexenmeister/MyFHEM/master/FHEM/98_systemd_watchdog.pm Wenn sich das gute Stück bewehrt, checke ich es auch ins FHEM-SVN-Repo ein.

Hier ist ein Kurzanleitung für die Instalation:

  • Sicherstellen, dass das eigene System unter Kontrolle von Systemd läuft. Dürfte bei den meisten aktuellen Linux-Distributionen der Fall sein.
  • Datei 98_systemd_watchdog.pm in das FHEM-Modulverzeichnis kopieren. Link: https://raw.githubusercontent.com/hexenmeister/MyFHEM/master/FHEM/98_systemd_watchdog.pm
  • In FHEM Watchdog-Device erstellen:
    define watchdog systemd_watchdog
  • Bleibt es bei Type=forking, dann sicherstellen, dass FHEM eine PID-Datei schreibt. Ggf. global Attribute pidfilename seiten:
    attr global pidfilename /opt/fhem/log/fhem.pid
    Bei Type=notify muss nofork=1 gesetzt werden:
    attr global nofork 1
  • FHEM beenden, falls noch läuft.
  • Sicherstellen, dass FHEM mittels systemd-script gestartet wird. Ggf. noch vorhandenen init.d-Script entfernen.
  • Systemd-Script (Inhalt s.u.) erstellen:
    sudo nano /etc/systemd/system/fhem.service
  • Systemd-Konfiguration aktualisieren:
    sudo systemctl daemon-reload
  • FHEM starten:
    sudo systemctl start fhem.service
  • Prüfen, ob alles wie gewünscht funktioniert: FHEM wird nicht alle 3 Minuten durch den Watchdog gekillt, beim Beenden mittels kill -9 wird neu gestartet, bei shutdown (aus FHEM) jedoch nicht.

 Hier ist das Startscript (fhem.service):

[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=/opt/fhem/log/fhem.pid [Install] WantedBy=multi-user.target

 

Das Modul erzeugt zwei Readings:
state: gibt an, ob die Instanz aktiv ist (ist automatish der Fall, wenn Systemd-Watchdog verfügbar ist)
next: zeigt den Zeitpunkt der nächten keep-alive-Meldung

Außerdem gibt es zusützlich zu den allgemeinen 'Internals' zwei weitere:
sleep-time: Zeitinterval zw. den keep-alive-Meldungen (wird aus dem im Watchdog definierten Interval ausgerechnet, es wird ein Vietel von der maximalen Zeit verwendet).
systemd-watchdog: zeigt an, ob Systemd-Watchdog verfügbar ist.

Update: Mit Hilfe von ExecStartPre wird jetzt das Verzeichnis für die PID-Datei bei Bedarf erstellt und der fhem-User als Besitzer eingetragen.

Kommentare (0)

Cancel or