[gelöst?] Frage zu Systemd Watchdog

Begonnen von FhemPiUser, 26 Mai 2019, 11:03:48

Vorheriges Thema - Nächstes Thema

FhemPiUser

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?

amenomade

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.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FhemPiUser

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?

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

FhemPiUser

#4
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...

FhemPiUser

#5
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...

hexenmeister

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?
Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy

FhemPiUser

#7
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!

hexenmeister

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.

Maintainer: MQTT_GENERIC_BRIDGE, SYSMON, SMARTMON, systemd_watchdog, MQTT, MQTT_DEVICE, MQTT_BRIDGE
Contrib: dev_proxy