nochmal systemd, shutdown und shutdown restart

Begonnen von willybauss, 24 März 2024, 16:18:41

Vorheriges Thema - Nächstes Thema

willybauss

Nach Neuinstallation von Buster und fhem (aus dem Repository) hatte ich folgendes (Fehl)verhalten:
Bei shutdown wird sofort ein Restart gemacht, obwohl der automatische Neustart nur bei shutdown restart erfolgen soll. Bei einem ausdrücklich gewünschten Shutdown ohne Restart sollte nicht neu gestartet werden.

Deshalb habe ich in der systemd Datei fhem.service die Zeile Restart=always geändert in Restart=on-abnormal.

Nun verhält es sich so:
shutdown funktioniert, ABER:
Wenn fhem als User fhem gestartet ist (z.B. direkt nach einem Raspi-Neustart), dann fährt fhem beim shutdown restart nicht mehr automatisch hoch. => wieder falsch, nur anders falsch als oben :-(.
Wenn fhem als User pi gestartet ist (Start-Kommandozeile: /usr/bin/perl fhem.pl fhem.cfg), dann wird beim shutdown restart automatisch auch der gewünschte Restart ausgeführt.

Der letztere Fall (User pi) wäre richtig, sollte aber auch bei User fhem genauso sein.
An dieser Stelle (spätestens) verlassen mich meine rudimentären Linux-Kenntnisse. Woran liegt's, bzw. was muss ich wie ändern?

Die /etc/systemd/system/fhem.service sieht so aus:
# $Id: fhem.service 19235 2019-04-21 13:26:17Z betateilchen $

[Unit]
Description=FHEM Home Automation
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
#Requires=mysql.service
#After=mysql.service

[Service]
Type=forking
User=fhem
Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
#ExecStart=/usr/bin/perl fhem.pl configDB
#Restart=always
Restart=on-abnormal
RestartSec=2

Edit:
Ich sollte noch erwähnen, dass ich nach der Neuinstallation von FHEM einen Restore von einem FHEM-Backup meines vorherigen Systems gemacht habe (dort lief FHEM unter dem User pi. Wurden beim Restore womöglich Dateien mit falschen Rechten rein kopiert?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Ralli

In FHEM:
defmod myShutdown cmdalias shutdown restart AS shutdown 1

fhem.service:
# $Id: fhem.service 19235 2019-04-21 13:26:17Z betateilchen $

[Unit]
Description=FHEM Home Automation
Wants=network.target
After=network.target
#Requires=postgresql.service
#After=postgresql.service
#Requires=mysql.service
#After=mysql.service

[Service]
Type=forking
User=fhem
Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
#ExecStart=/usr/bin/perl fhem.pl configDB
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
Gruß,
Ralli

Proxmox 8.2 Cluster mit HP ED800G2i7, Intel NUC11TNHi7+NUC7i5BNH, virtualisiertes fhem 6.3 dev, virtualisierte RaspberryMatic (3.79.6.20241031) mit HB-RF-ETH 1.3.0 / RPI-RF-MOD, HM-LAN-GW (1.1.5) und HMW-GW, FRITZBOX 7490 (07.59), FBDECT, Siri und Alexa

Ellert

Ich habe Restart=on-failure gesetzt.

shutdown fährt runter

shutdown 1 restartet

willybauss

@Ralli:
Hm - Danke erst mal.

Der Vorschlag klingt für mich so, als ob wir das falsche Verhalten des Users fhem ignorieren und statt dessen in FHEM einen Workaround dafür basteln. Wäre es nicht sauberer, das Verhalten des Users fhem zu korrigieren (Userrechte, ... ? ? ?), so dass gar kein Workaround nötig ist?

@Ellert:
was passiert bei "shutdown restart"?
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Ellert


willybauss

FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Ellert


willybauss

Hab's grade an einem neu aufgesetzten System getestet: dort geht shutdown restart. Es scheint also was mit dem FHEM-Restore aus dem alten Backup zu tun zu haben.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Ellert

#8
ZitatIf the optional restart parameter is specified, FHEM tries to restart itself. exitValue may be important for start scripts.

In der Commandref allerdings ist nicht ausgeschlossen, dass restart nicht funktioniert und dass ein exitValue erforderlich ist.

Zitat von: willybauss am 24 März 2024, 18:52:38neu aufgesetzten System getestet: dort geht shutdown restart

Aber funktioniert auch shutdown?

willybauss

Zitat von: Ellert am 24 März 2024, 19:02:44Aber funktioniert auch shutdown?

Oha. Macht immer Shutdown Restart, obwohl in der fhem.config ausdrücklich Restart=on-abnormal steht.
Dann kann ich die Suche aufgeben, denn dort ist es eben anders falsch  :o .
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

willybauss

Hab's jetzt doch mit dem cmdalias gemacht, auch wenn's etwas unbefriedigend ist.

Der Vollständigkeit halber sei erwähnt, dass lt. CommandRef "shutdown restart" nicht nur funktionieren könnte, sondern eigentlich funktionieren müsste:
Zitatshutdown
shutdown [restart] [exitValue]

Der Befehl fährt FHEM herunter (nach dem Sichern aller Gerätestatus). Er triggert den global:SHUTDOWN-Event. Mit dem optionalen Parameter restart startet FHEM danach neu. Der exitValue ist möglicherweise bei bestimmten Start-Skripten zur korrekten Funktion vonnöten bzw. wichtig.

Beispiel:
shutdown
shutdown restart
shutdown 1
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Ellert

Du weist schon, dass die deutsche Befehlsreferenz nicht maßgeblich ist? In diesem Fall wurde 'tries' nicht übersetzt.

Hier noch etwas Hintergrund:  https://forum.fhem.de/index.php?topic=45202.0

Otto123

#12
Man muss bedenken das FHEM nicht exklusiv für Systeme mit Systemd init system geschrieben wurde. Das hier beschrieben Verhalten ist ein Sonderfall und die Kombination aus
  • der Implementierung des shutdown Kommandos in FHEM,
  • dem Start von FHEM mit Systemd,
  • und dem im debian Paket mitgelieferten Systemd init script.
In der Modifikation von Ellert funktioniert shutdown 1 als shutdown restart, weil damit ein "Fehler" beim exit gesetzt wird und Systemd bei der Konfiguration erkennt das es jetzt neu starten sollte. shutdown restart übergibt wahrscheinlich Exitcode=0 (kein Fehler)
  • Der Eingangs beschriebene Start mit einem x beliebigen User führt FHEM anschließend unter diesem user aus und man muss selbst Sorge tragen das die Dateirechte passen.
  • Der Start mit user fhem ist nicht anders, nur passen da in der Regel die Dateirechte durch das ausgeführte setupscript.
  • Der Start mit einem User mit root Rechten und dem Vorhandensein des User fhem im System, führt zu einem sofortigen Verlassen des eigentlichen Starts und einem Neustart als user fhem. Da systemd mit root Rechten startet, ist die Angabe des User fhem im Startscript eigentlich redundant.
Startet man FHEM mit dieser Sequenz (also ganz ohne Systemd):
cd /opt/fhem
sudo /usr/bin/perl fhem.pl fhem.cfg
startet FHEM mit user fhem und ein shutdown restart sowie shutdown funktioniert wie in der commandref beschrieben.

Insgesamt ist für die allermeisten Usern das implementierte Verhalten mit systemd ein großer Vorteil! Einen Workaround braucht eigentlich niemand, maximal nach dem Motto: Das Klavier muss gestimmt sein. :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

willybauss

@Ellert und @Otto123:
Danke für die Hintergrundinformationen.
Zitat von: Ellert am 24 März 2024, 19:42:29Hier noch etwas Hintergrund:  https://forum.fhem.de/index.php?topic=45202.0

Irgendwie ist das Ganze nicht konsequent zu Ende gedacht/implementiert/dokumentiert/wasAuchImmer/... Allein, dass die empfohlene Installationsmethode im Ergebnis zu solch konfusem Verhalten führt, erfordert schon viel Ignoranz, um nicht mal aufgeräumt zu werden. Ich belasse es dabei. Meine langjährige Erfahrung mit Softwareentwicklern lehrt mich, dass gegen die "funktioniert doch ein bisschen"-Denke nicht anzukommen ist.
FHEM auf Raspberry Pi B und 2B; THZ (THZ-303SOL), CUL_HM, TCM-EnOcean, SamsungTV, JSONMETER, SYSMON, OBIS, STATISTICS

Otto123

Harte Worte von einem im Glashaus ...  ;D
Hat nichts mit deinem eigentlichen "Problem" zu tun - aber:
Zitat von: willybauss am 24 März 2024, 16:18:41Ich sollte noch erwähnen, dass ich nach der Neuinstallation von FHEM einen Restore von einem FHEM-Backup meines vorherigen Systems gemacht habe (dort lief FHEM unter dem User pi. Wurden beim Restore womöglich Dateien mit falschen Rechten rein kopiert?
Je nach dem wie Du restore gemacht hast? In jedem Fall müssen die Dateien im Pfad fast ohne Ausnahme durch den User unter dem FHEM läuft beschreibbar sein. Das wird per default durch die Eigentümerschaft fhem:dialout erreicht.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz