Moin,
ich nutze zur Fernsteuerung das hier angebotene FHEMWidget2. (https://forum.fhem.de/index.php/topic,45328.0.html)
Dies wird auf der Konsole des RPi in einem Screen gestartet, mit der Folge, das es NICHT automatisch nach einem SystemReboot oder Neustart von FHEM automatisch gestartet wird.
Ich habe jetzt unter /etc/systemd/system ein "fhemwidget.service" mit folgendem Inhalt angelegt:
[Unit]
Description=starten des FHEM-Widgets nach reboot
After=fhem.service
[Service]
ExecStart=/usr/local/bin/sync.sh
Restart=always
[Install]
WantedBy=multi-user.target
anschliessend per
sudo systemctl daemon-reload
sudo systemctl enable fhemwidget.service
sudo systemctl start fhemwidget.service
aktiviert.
der Inhalt der sync.sh sieht wie folgt aus:
#!/bin/sh
screen -dmS FHEMSyncClient bash pushsync.sh
exit
führe ich die sync.sh manuell aus, wird der SyncService des Widgets gestartet, und ich kann von ausserhalb meinen Heimnetzwerks via der App auf die darin enthaltenen Schalter o.ä. zugreifen.
Leider funktioniert es nicht automatisch via "systemd".
Können die LinuxProfis mir hier mal den entscheidenden Tip geben ?
Als welcher user startest Du denn Normalerweise das Script?
Und .. muß es wirklich "IM" Screen laufen?? Kenne jetzt das Script selber nicht ....
Moin,
also normalerweise starte ich das Skipt händisch via User "pi".
Ich habe es jetzt geschafft, das Skript auch automatisch via Service@systemd zu starten, dies geschieht allerdings mit Rootrechten. Es tut aber der Funktion keinen Abbruch.
Warum es in einem Screen läuft ? Weil es funktioniert und vom Developer so vorgeschlagen wurde.....
http://tasior.info:8081/fhemwidget_sync_de.html (http://tasior.info:8081/fhemwidget_sync_de.html)
Aber ich habe mich auch schon gefragt, ob der Sync-Client (ist ne Java-Anwendung) nicht ohne Screen laufen würde....., aber so tief stecke ich in der Materie nicht drin. So wird der SyncClient gestartet:
java -jar FHEM_Sync_Client.jar -v -url=http://localhost:8084
Bin schon froh das es jetzt via Systemd automatisch läuft... aber für Verbesserungen bin ich immer zu haben.
Also eigentlich kennt Systemd User/Gruppe
User=pi
Group=pi
Und warum er im Screen laufen soll, schreibe der nicht. Ich würde es einfach "nur" in den Hintergrund schicken. Wenn es aber läuft ....
Danke, den User in Systemd mitzugeben hatte ich auch schon dran gedacht... baue ich mal ein.
Wie würdest Du denn das "in den Hintergrund schicken" ?
Hi,
für meine Begriffe wird hier ziemlich viel "missachtet" :) Ich hatte mal hier ein bisschen was aufgeschrieben.
https://wiki.fhem.de/wiki/Fhem.service_(systemd_unit_file)
Ganz wichtig sind aus meiner Sicht die Pfade! Immer komplette Pfadangaben verwenden - oder in den gewünschten Arbeitspfad wechseln.
Der Eintrag After=fhem.service ist mehr ein Wunsch! Es bedeutet nicht dass FHEM wirklich läuft! Es bedeutet das FHEM vorher zum Start getriggert wurde!
Müsste Type=oneshot nicht verwendet werden?
Gruß Otto
Hallo Otto,
ich habe wirklich viel gelesen und probiert, bis dann dieses Skript den gewünschten Erfolg hatte:
[Unit]
Description=starten des FHEM-Widgets nach reboot
After=fhem.service
[Service]
Type=simple
WorkingDirectory=/home/pi
ExecStart=/usr/local/bin/sync.sh
ExecStop=/bin/kill -9 $MAINPID
RestartSec=150
Restart=always
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Entscheidend war bei meiner Konfig der Eintrag "RemainAfterExit=yes" damit das Widget auch in einem Screen läuft.
Das Widget wird jetzt jedenfalls nach einem Reboot gestartet, bzw. nach einem FHEM-Neustart.
Aber ich schaue mir jetzt mal an was Du dazu aufgeschrieben hast.
Ja, ich verstehe das "After=fhem.service" ein Wunsch ist. Aber mit dem Delay von 150s klappt es, dann läuft FHEM in der Regel.
Sieht auf alle Fälle besser aus :)
Aber dein RestartSec wirkt mMn nicht bei Start sondern eben nur beim Restart.
Ich hätte sicher einfach sowas gemacht ExecStartPre=/bin/sleep xx weil ich es auch nicht besser weiß ;)
Ich habe auch hier (https://heinz-otto.blogspot.com/2020/05/systemd-unit-file.html)noch ein bisschen zum Lesen, da ist auch ein link zum umfangreichen Handbuch
Es giebt dann noch den "need"
Wenn FHEM mal runtergefahren wird, wird es auch automatisch mit abgeschaltet ....
Zitat von: Wernieman am 15 Februar 2021, 14:46:51
Es giebt dann noch den "need"
Wenn FHEM mal runtergefahren wird, wird es auch automatisch mit abgeschaltet ....
Meinst Du ,,requires=fhem.service" ?
Jep ...
Hast Recht, eingebaut.