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 /var/run/fhem/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 /opt/fhem/config/fhem.service
- Script aktivieren:
sudo systemctl enable /opt/fhem/config/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. <- shutdown klappt doch 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 -p /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 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.
Update2: Nach einer Testphase habe ich das Modul in das offizielle Repo eingecheckt und im Forum beschriben: https://forum.fhem.de/index.php/topic,90438.0.html
Kommentare (0)