shutdown restart und systemd

Begonnen von helbgd, 27 Juli 2014, 14:02:16

Vorheriges Thema - Nächstes Thema

helbgd

Hallo, leider startet fhem nach einem shutdown restart nicht mehr neu.

es wird ja folgendes ausgeführt um fhem neu zu starten:

      system("(sleep 2; exec $^X $0 $attr{global}{configfile})&");

Da ich fhem auf Arch linux und damit mit dem systemd starte frage ich mich nun ob vlt der Systemd es nicht zulässt das der Process sich selbst so wie hier neu startet.

Wenn ich fhem.pl per hand starte ohne systemctl etc ... nur mittels
usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
kann ich fhem ohne probleme neu starten.


Hier mein Systemd Service Script:

fhem.service
[Unit]
Description=FHEM Perl Server
After=syslog.target network.target owserver.service

[Service]
Type=forking
User=fhem
Group=fhem
WorkingDirectory=/opt/fhem

ExecStart=/usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg

[Install]
WantedBy=multi-user.target

Gibt es leute die auch Systemd einsetzen und kann man dort mittel shutdown restart fhem neu starten?
Und wieso könnte das bei mir nicht klappen?


helbgd

Habe das Problem nun selbst gefixt:


[Unit]
Description=FHEM Perl Server
After=syslog.target network.target owserver.service

[Service]
Type=oneshot <<<<<<<<<
User=fhem
Group=fhem
WorkingDirectory=/opt/fhem
RemainAfterExit=yes <<<<<<<<<
ExecStart=/usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg


[Install]
WantedBy=multi-user.target



nun kann ich in fhem shutdown restart benuten und fhem startet wieder neu.  :-)

rudolfkoenig


CONSULitAS

 :) ebenfalls danke, habe ich lange nach gesucht!

papa

Danke auch von mir ... da hatte ich schon lange aufgegeben.
BananaPi + CUL868 + CUL433 + HM-UART + 1Wire

smmmo

Mit folgenden 2 Zeilen wird dann auch das Stoppen bzw. der Restart (z.B. nach dem Updaten) unterstützt:


ExecStop=/usr/bin/perl /opt/fhem/fhem.pl 7072 shutdown
ExecReload=/usr/bin/perl /opt/fhem/fhem.pl 7072 shutdown;/usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg;


Hässlich ist, dass der Port 7072 hardcoded hinterlegt ist. Keine Ahnung wie hier eine elegante systemd-Möglichkeit aussehen sollte..

rudolfkoenig

Man setzt attr global pidfilename, und sendet dem Prozess ein SIGTERM.
Ueblich unter unix.

betateilchen

Zitat von: rudolfkoenig am 30 Dezember 2014, 20:57:00
Man setzt attr global pidfilename

und achtet darauf, dass fhem das File auch an der angegebenen Stelle beschreiben darf...
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!