Ich möchte das Modul Systemd Watchdog Client einrichten, damit fhem nach Absturz über systems restart on failure automatisch neu gestartet wird.
Ich habe ein paar Fragen dazu:
1. Nach der Anleitung in der commandref soll man eine das dort gelistete Skript unter /etc/systemd/system/fhem.service ablegen. Mich wundert jedoch, das bei mir unter (Jessie) /run/systemd/generator.late/fhem.service bereits ein ähnliches File liegt. Muss ich das editieren oder trotzdem noch ein zusätzliches unter /etc/systemd/system/fhem.service ablegen?
2. In der Anleitung steht
ZitatBei "Type=forking" muss in Script der korrekte Pfad zu dem PID-Datei angegeben werden
Bei mir existiert die angegebene Datei "/var/run/fhem/fhem.pid" nicht. Muss so eine Datei bereits existieren oder wird diese erst neu von systemd erstellt?
3. Wie erkennt systemd eigentlich, dass fhem nicht mehr läuft?
1. Ein zusätzliches würde ich nicht kreieren. /etc/systemd wird genauso wie /run/systemd untesucht. Nur: etc hat Vorrang auf run. Am Ende hättest Du 2 fhem Dienste...
2. die PID Datei wird durch den Start des service erzeugt (aufgrund "PIDFile=/var/run/fhem/fhem.pid" im Unit Skript.
ok, aber mein bereits existierendes unit file sieht etwas anders aus, hat z.B. keine Option PIDFile:
[Unit]
SourcePath=/etc/init.d/fhem
Description=LSB: FHEM server
Before=runlevel2.target runlevel3.target runlevel4.target runlevel5.target shutdown.target
After=local-fs.target remote-fs.target
Conflicts=shutdown.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SysVStartPriority=1
ExecStart=/etc/init.d/fhem start
ExecStop=/etc/init.d/fhem stop
Einfach "Restart=on-failure" setzen und das wars? Option PIDFile nicht notwendig?
Dies wurde nich über systemd sondern über init.d erzeugt.
https://www.tecmint.com/systemd-replaces-init-in-linux/
aber "systemctl status fhem" sagt folgendes:
● fhem.service - LSB: FHEM server
Loaded: loaded (/etc/init.d/fhem)
Active: active (exited) since Sa 2019-04-27 20:43:52 CEST; 4 weeks 0 days ago
Bedeutet das nicht, dass es bereits über systemd läuft?
Außerdem liegt das unit file unter "/run/systemd/generator.late/fhem.service", was auch nach systemd klingt...
Auf Deiner Seite steht auch "Debian 8 codename Jessie will have systemd by default". Da ich Jessie habe, sollte es systemd sein...
Laut manpage systemd hat /etc/systemd/system/ Vorrang vor /run/systemd/ und es wird immer nur einmal der Dienst gestartet. Ich bin also jetzt einfach mal nach Anleitung vorgegangen und es funktioniert im Prinzip.
Allerdings werden offenbar immer wieder zusätzliche fhem Prozesse gestartet udn gekillt. "ps -ax" hintereinander aufgerufen zeigt:
~ $ ps ax| grep fhem
11918 ? R 3:41 /usr/bin/perl fhem.pl fhem.cfg
12428 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
12431 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
12432 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
12433 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
12434 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
12437 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:41 /usr/bin/perl fhem.pl fhem.cfg
12428 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:41 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? R 3:42 /usr/bin/perl fhem.pl fhem.cfg
12442 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:42 /usr/bin/perl fhem.pl fhem.cfg
12442 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:42 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:44 /usr/bin/perl fhem.pl fhem.cfg
~ $ ps ax| grep fhem
11918 ? S 3:44 /usr/bin/perl fhem.pl fhem.cfg
12468 ? S 0:00 /usr/bin/perl fhem.pl fhem.cfg
systemctl status sagt:
~ $ sudo systemctl status fhem
● fhem.service - FHEM Home Automation
Loaded: loaded (/etc/systemd/system/fhem.service; enabled)
Active: active (running) since So 2019-05-26 13:26:08 CEST; 11min ago
Main PID: 11918 (perl)
Status: "started"
CGroup: /system.slice/fhem.service
├─11918 /usr/bin/perl fhem.pl fhem.cfg
├─12775 /usr/bin/perl fhem.pl fhem.cfg
├─12776 /usr/bin/perl fhem.pl fhem.cfg
└─12777 /usr/bin/perl fhem.pl fhem.cfg
Mai 26 13:25:19 systemd[1]: PID file /var/run/fhem/fhem.pid not readable (yet?) after start.
Mai 26 13:26:08 systemd[1]: Started FHEM Home Automation.
Soll das so oder was läuft noch falsch? Habe genau das unit file aus der commandref genommen...
Update: Scheint ok zu sein, da forks von fhem, da alle den gleichen main pid haben:
~ $ ps -ef| grep fhem.pl
fhem 13009 1 92 13:41 ? 00:02:02 /usr/bin/perl fhem.pl fhem.cfg
fhem 13046 13009 0 13:41 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13047 13009 0 13:41 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13087 13009 2 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13088 13009 4 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13089 13009 4 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13090 13009 4 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13091 13009 4 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13092 13009 0 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13093 13009 0 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
fhem 13094 13009 0 13:43 ? 00:00:00 /usr/bin/perl fhem.pl fhem.cfg
Des Weiteren startet er fhem nach "kill -9" neu. Also offenbar alles ok...
Hm. Es sieht für mich nicht gut aus, da es scheinbar doch mehrere Instanzen von FHEM existieren. Systemd beschwert sich auch über eine fehlende PID-Datei. Hast du eine entsprechende Option in global auch definiert?
attr global pidfilename /var/run/fhem/fhem.pid
Ist auch ein watchdog-Device eingerichtet?
Danke für das Prüfen. Nach dem Output des "ps -ef" unten sollten die fhem Instanzen 13046-13094 alle Kinder des Vaterprozesses 13009 sein (siehe 2. Spalte), daher sollte es nur eine fhem Instanz geben und der Rest sollten forks sein durch irgendwelche fhem Module.
Die PID-Datei gibt es und ist auch in global als attr gesetzt, wurde aber laut journalctl erst nach einige Zeit nach dem Start erstellt:
ls -l /var/run/fhem/fhem.pid
-rw-r--r-- 1 fhem dialout 4 Mai 26 13:54 /var/run/fhem/fhem.pid
sudo journalctl -u fhem.service
Mai 26 13:53:25 systemd[1]: Starting FHEM Home Automation...
Mai 26 13:53:27 systemd[1]: PID file /var/run/fhem/fhem.pid not readable (yet?) after start.
Mai 26 13:54:45 rasp2fhem systemd[1]: Started FHEM Home Automation.
Bei mir dauert das Starten von fhem ziemlich lange durch die vielen devices. Evtl. sollte man einige der Timer unit file entsprechend anpassen. Werde wohl besser TimeoutStartSec auf 420s oder so hochsetzen...
watchdog scheint auch zu laufen. "list watchdog" ergibt:
Internals:
FUUID xxx
NAME watchdog
NR 1181
NTFY_ORDER 50-watchdog
STATE active
TYPE systemd_watchdog
sleep-time 45
systemd-watchdog available
READINGS:
2019-05-26 19:44:29 next 19:45:14
2019-05-26 13:56:03 state active
Sieht also erstmal für mich alles soweit ok aus...
Und danke für das Modul, klasse Idee und Umsetzung!
Danke für die Blumen :D
Freut mich, wenn es jetzt alles richtig funktioniert :)
Bei den Startzeiten sollte man aber versuchen auszumisten. Ich habe meine 'Logic' auf mehrere parallele FHEM-Instanzen 'zerlegt' (sprechen miteinamder per MQTT). Alles Instanzen berauchen zum Start zw. 5 und 20 Sekunden.