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?
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. :-)
Danke fuer die Lösung
:) ebenfalls danke, habe ich lange nach gesucht!
Danke auch von mir ... da hatte ich schon lange aufgegeben.
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..
Man setzt attr global pidfilename, und sendet dem Prozess ein SIGTERM.
Ueblich unter unix.
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...