Autor Thema: [HowTo] fhem als service unter systemd starten  (Gelesen 4653 mal)

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13160
  • Probleme sind auch keine Lösung.
[HowTo] fhem als service unter systemd starten
« am: 05 Juni 2016, 13:30:26 »
Dieser Thread ist nicht für Linux-Anfänger gedacht!

Voraussetzungen:
  • Alle Befehle auf der Systemconsole müssen mit root-Rechten ausgeführt werden
  • Die Anleitung geht von einem Debian-basierten System aus
  • fhem sollte bereits installiert sein und korrekt funktionieren
  • während der Umstellung darf fhem selbst nicht laufen



1. Benötigte Pakete installieren, falls nicht schon vorhanden

apt-get -y install systemd systemd-sysv


2. Altes Startskript deaktivieren

update-rc.d fhem remove


3. unit-file /etc/systemd/system/fhem.service mit folgendem Inhalt erstellen

[Unit]
Description=FHEM Home Automation

[Service]
Type=forking
#ExecStartPre=/opt/hmusbcfg/hmland -d -p 1234 -r 0
ExecStart=/etc/init.d/fhem start
ExecStop=//etc/init.d/fhem stop
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target



4. Den systemd über Änderungen seiner Konfiguration informieren

systemctl --system daemon-reload


5. Den Service fhem zuerst manuell starten, um zu sehen, ob alles funktioniert

systemctl start fhem.service

systemctl status fhem.service

sollte als Ausgabe liefern:

fhem.service - FHEM Home Automation
  Loaded: loaded (/etc/systemd/system/fhem.service; enabled)
  Active: active (running) since Sun, 05 Jun 2016 12:53:12 +0200; 4min 6s ago
Main PID: 5007 (perl)
  CGroup: name=systemd:/system/fhem.service
  └ 5007 perl fhem.pl configDB

Jun 05 12:53:10 cubie.betateilchen.de fhem[5005]: Starting fhem...


6. Den Service beim Booten automatisch starten

systemctl enable fhem.service


7. Das System einmal per reboot neu starten, fhem sollte danach automatisch wieder laufen.



Achtung:

Nach dieser Änderung reagiert ein shutdown innerhalb von fhem nicht mehr wie gewohnt.

Da im unit-file ein Restart= definiert wurde, wird nach einem shutdown der fhem Prozess nach 5 Sekunden automatisch wieder neu gestartet. Wer das nicht möchte, kommentiert die Restart= Zeile im unit-file einfach aus.

Ebenfalls im unit-file ist die auskommentierte Zeile zum Starten eines hmland enthalten, falls dieser benötigt wird. Das ist im Moment eine Krücke, ich werde für hmland auch noch ein unit-file erstellen. Aber zum Testen war das so ganz ok.
Mach doch mal "fheminfo send" um die FHEM Statistik zu unterstützen!

Nächster Hamburg-Stammtisch am 15.09.2017!
Gefällt mir Gefällt mir x 3 Liste anzeigen

Offline Newbie

  • Full Member
  • ***
  • Beiträge: 120
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #1 am: 28 Juni 2016, 20:07:50 »
Hallo Betateilchen,

hab mich mal versucht und komme irgendwie nicht ans Ziel.

systemctl status fhem.service - ergibt folgendes:

● fhem.service - FHEM Home Automation
   Loaded: loaded (/etc/systemd/system/fhem.service; enabled; vendor preset: ena
   Active: active (running) since Tue 2016-06-28 19:47:38 CEST; 29s ago
  Process: 651 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
  Process: 542 ExecStartPre=/opt/hmcfgusb/hmland -d -p 1234 -r 0 (code=exited, s
   CGroup: /system.slice/fhem.service
           └─719 /opt/hmcfgusb/hmland -d -p 1234 -r 0

Jun 28 19:47:36 odroid systemd[1]: Starting FHEM Home Automation...
Jun 28 19:47:36 odroid hmland[542]: Daemon with PID 558 started!
Jun 28 19:47:37 odroid fhem[651]: Starting fhem...
Jun 28 19:47:37 odroid fhem[651]: Daemon with PID 719 started!
Jun 28 19:47:38 odroid systemd[1]: Started FHEM Home Automation.

Ergebnis FHEM mit Browser nicht erreichbar. Läuft doch aber oder???

Noch ne Frage zu Punkt 3 -

muss es nicht

Zitat
#ExecStartPre=/opt/hmcfgusb/hmland -d -p 1234 -r 0

und

Zitat
ExecStop=/etc/init.d/fhem stop

heißen?

System ist ein Odroid XU4 mit Ubuntu 16.04

vg Jens
fhem-5.8 (configDB+DbLog)  auf ODROID-XU4 mit Ubuntu 17.04
HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-Sen-MDIR-O-2, HM-CC-TC, HM-CC-VD, HM-SEC-RHS,HM-LC-SW1-PL2, HM-CFG-LAN, HM-CFG-USB-2

Online Wernieman

  • Hero Member
  • *****
  • Beiträge: 3022
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #2 am: 29 Juni 2016, 09:39:21 »
Ob er läuft, solltest Du nicht mit dem Browser, sondern bei Problemen direkt am Pi Testen (ssh):
(Alle Ausgaben sind nur als Beispiel zu sehen)

1. Läuft der Prozess?
ps aux | grep [f]hem
fhem      1601  0.3  1.3 186512 106840 ?       S    Jun23  29:26 /usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg
fhem     26600  0.0  1.2 186512 101648 ?       S    06:31   0:00 /usr/bin/perl /opt/fhem/fhem.pl /opt/fhem/fhem.cfg

Alternativ um Sicherzugehen, das nur eine Instanz läuft:
pstree | grep [f]hem
|-fhem.pl---fhem.pl

Ich habe 2x fhem, da eines "nonblocking" mpd bedient. Wenn untereinander Auftaucht, hast Du ein Problem

2. Wurde auf dem Port konnektet?
es sollten die FHEM Ports auftauchen, im Standard:
sudo netstat -lntp | grep perl
tcp        0      0 0.0.0.0:8083            0.0.0.0:*               LISTEN      1601/perl       
tcp        0      0 0.0.0.0:8084            0.0.0.0:*               LISTEN      1601/perl       
tcp        0      0 0.0.0.0:8085            0.0.0.0:*               LISTEN      1601/perl       
tcp        0      0 0.0.0.0:7072            0.0.0.0:*               LISTEN      1601/perl       

3. Ist FHEM erreichbar (wenn Telnet nicht abgeschaltet)
telnet localhost 7072bzw. für die Eiligen, wenn kein Password vergeben wurde:
echo "list" | nc localhost 7072
..... FHEM-Configuration soll durchscrollen .....


4. Jetzt local Prüfen ob FHEM erreichbar ist
wget localhost:8083 -O
..... HTML-Code sichtbar, keine Fehlermeldungen .....

5. ab jetzt kommt erst Dein obiger Browser ins Spiel
- Bitte um Input für Output
- When there is a Shell, there is a Way

FHEM auf Gentoo/Ubuntu-Server
incl. CUL (433,868), JeeLink und SISPM

Offline Newbie

  • Full Member
  • ***
  • Beiträge: 120
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #3 am: 29 Juni 2016, 16:39:01 »
Hallo Werniemann,

danke für die Tipp's, es gab wirklich mehrere FHEM-Proszesse.
Alles bereinigt und FHEM-Autostart funktioniert nun.
Gibt zwar noch ein kleines Problem beim HMCFGUSB unter systemd starten, aber ich weiss ja jetzt wo ich ansetzen kann.

Zitat
● fhem.service - FHEM Home Automation
   Loaded: loaded (/etc/systemd/system/fhem.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2016-06-28 23:48:45 CEST; 16h ago
 Main PID: 1071 (perl)
   CGroup: /system.slice/fhem.service
           └─1071 perl fhem.pl configDB

Jun 28 23:48:44 odroid systemd[1]: Starting FHEM Home Automation...
Jun 28 23:48:44 odroid hmland[987]: Daemon with PID 988 started!
Jun 28 23:48:44 odroid fhem[992]: Starting fhem...
Jun 28 23:48:45 odroid systemd[1]: Started FHEM Home Automation.

danke und schönen Tag noch, Jens
fhem-5.8 (configDB+DbLog)  auf ODROID-XU4 mit Ubuntu 17.04
HM-CC-RT-DN, HM-TC-IT-WM-W-EU, HM-Sen-MDIR-O-2, HM-CC-TC, HM-CC-VD, HM-SEC-RHS,HM-LC-SW1-PL2, HM-CFG-LAN, HM-CFG-USB-2

Offline frank

  • Hero Member
  • *****
  • Beiträge: 5710
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #4 am: 27 August 2016, 19:44:50 »
danke für die anleitung.
ich musste heute auf systemd umstellen. wie es aussieht funktioniert es auch "eigentlich".

● fhem.service - FHEM Home Automation
   Loaded: loaded (/etc/systemd/system/fhem.service; enabled)
   Active: inactive (dead) since Sat 2016-08-27 19:17:17 CEST; 5s ago
  Process: 2134 ExecStop=/etc/init.d/fhem stop (code=exited, status=0/SUCCESS)
  Process: 2015 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
 Main PID: 2017 (code=exited, status=0/SUCCESS)

Aug 27 19:13:38 raspberrypi systemd[1]: Starting FHEM Home Automation...
Aug 27 19:13:38 raspberrypi fhem[2015]: Starting fhem...
Aug 27 19:13:38 raspberrypi systemd[1]: Started FHEM Home Automation.
Aug 27 19:17:16 raspberrypi systemd[1]: Stopping FHEM Home Automation...
Aug 27 19:17:16 raspberrypi fhem[2134]: Stopping fhem...
Aug 27 19:17:17 raspberrypi systemd[1]: Stopped FHEM Home Automation.

nach einem reboot oder fhem shutdown gibt es aber regelmässig ein "Failure" mit ExecStop.
● fhem.service - FHEM Home Automation
   Loaded: loaded (/etc/systemd/system/fhem.service; enabled)
   Active: active (running) since Sat 2016-08-27 19:27:30 CEST; 1min 4s ago
  Process: 762 ExecStop=/etc/init.d/fhem stop (code=exited, status=1/FAILURE)
  Process: 857 ExecStart=/etc/init.d/fhem start (code=exited, status=0/SUCCESS)
 Main PID: 860 (perl)
   CGroup: /system.slice/fhem.service
           └─860 perl fhem.pl fhem.cfg

Aug 27 19:27:29 raspberrypi fhem[857]: Starting fhem...
Aug 27 19:27:30 raspberrypi systemd[1]: Started FHEM Home Automation.

ein explicites "systemctl stop fhem.service" läuft hingegen sauber durch, wie oben zu sehen ist.
ich benutze das fhem.3-script mit der auskommentierung, wie in diesem thread https://forum.fhem.de/index.php/topic,53825.0.html, auf pi3.

gruss frank
FHEM: 5.8(SVN) => Pi3(jessie)
IO: CUL433_V3.3(1.00.01B53)|CUL868_V3.3(1.58)|HMLAN(0.965)|HMUSB2(0.967)|HMUART(1.4.1)
CUL_HM: CC-TC|CC-VD|SEC-SD|SEC-SC|SEC-RHS|Sw1PBU-FM|Sw1-FM|Dim1TPBU-FM|Dim1T-FM|ES-PMSw1-Pl
IT: ITZ500|ITT1500|ITR1500|GRR3500

Offline chris1284

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3394
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #5 am: 27 August 2016, 22:14:40 »
auch wenn es nicht für linux anfäönger ist wäre es gut wenn du einen kleinen satz zum warum und wieso einbauen könntest.

Zitat
fhem als service unter systemd starten
was hat das für einen hintergunden , warum macht das sinn?
#HP Proliant MicroServer Gen8: FHEM, SAMBA, PLEX
#CCU2 + HMLAN: Heizung, Schalter, Sensoren, Remotes
#nanoCUL868: lacrossmode für Außensensor
#culCUBE868,signalduino,nanoCUL433: die lauschen nur

Offline decaflo

  • Jr. Member
  • **
  • Beiträge: 50
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #6 am: 30 September 2016, 12:00:09 »
was hat das für einen hintergunden , warum macht das sinn?

systemd wird nach und nach bei fast allen Linuxdistributionen eingesetzt. Je nach Distribution funktioniert dann der Start über Startscript unter /etc/init.d/ nicht mehr.
Du musst aber nichts umstellen, wenn Dein System reibungslos läuft. Anders sieht es u.U. bei künftigen Neuinstallationen aus.

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 1030
  • Anti-Statement befreite Zone ;)
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #7 am: 03 Dezember 2016, 16:06:59 »
Habe das Ganze heute auch mal auf meiner zweiten FHEM Umgebung eingerichtet und getestet.

1.
muss es nicht

und
Zitat
ExecStop=/etc/init.d/fhem stop
heißen?

Ist richtig. Es darf nur ein / sein.

2. Ich musste meinen Pi nach Schritt 3 bzw 4 erst neustarten, damit ich mittels der Befehle testen konnte, ob FHEM läuft, oder nicht. Vorher kam immer ein Fehler. Grund konnte ich noch nicht ermitteln. Nach einem Restart hat es aber geklappt. Dann konnte ich auch die letzten Schritte ausführen, bzw. habe es testweise vorher schon mal zum Autostart hinzugefügt gehabt, obwohl es sich nicht manuell starten lassen wollte und es hat geklappt.

3. Was mich noch interessieren würde ist, ob es eine Option gibt, dass FHEM nicht gestartet wird, wenn es zB innerhalb einer bestimmten Zeit X mal neugestartet wurde, weil irgendein Fehler ständig einen neustart erzwingt? Hatte vorher Monit genutzt und da ging es ganz gut sowas einzustellen.

Sonst finde ich es ganz gut. Bin mir nur noch unsicher, ob ich das oder Monit besser finde. Bei Monit sehe ich aktuell noch mehr Möglichkeiten.
FHEM auf Raspberry B+, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline mareb

  • New Member
  • *
  • Beiträge: 13
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #8 am: 06 Dezember 2016, 21:19:55 »
Moin,

mir ist nicht ganz klar, warum trotz systemd das init-skript verwendet wird. Genau das will man ja eigentlich loswerden.

Bei mir sieht die Service-Section so aus:
[Service]
Type=forking
User=fhem
Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg
Restart=on-failure

Just my 2 cents,
Markus

Online Wernieman

  • Hero Member
  • *****
  • Beiträge: 3022
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #9 am: 07 Dezember 2016, 08:53:17 »
Das ist so nicht gaaans richtig. Du kannst auch mit systemd Scipte starten, was auch per se nicht falsch ist. Ob man aber unbedingt die in inet.d nehmen muß ....

- Bitte um Input für Output
- When there is a Shell, there is a Way

FHEM auf Gentoo/Ubuntu-Server
incl. CUL (433,868), JeeLink und SISPM

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 1030
  • Anti-Statement befreite Zone ;)
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #10 am: 07 Dezember 2016, 14:01:47 »
Denke das es eher darum geht, dass so ziemlich jeder diese Skripte auf Grund der Installation in der init.d hat und daher dieser Ort genommen wurde. Warum jetzt mit dem Skripten und nicht mit direktem Start gearbeitet wurde, würde ich mir damit erklären, dass manche mit der cfg und manche mit DB arbeiten. Wobei man dies natürlich auch hätte berücksichtigen können und einfach zwei Erklärungen gemacht hätte ;)

Egal wie, es geht beides und macht keinen Unterschied, wie man es gemacht hat. Ich zum Beispiel arbeite auch mit dem Script, liegt aber daran, dass ich mir noch eine Pushover Nachricht zukommen lasse, sobald FHEM beendet wurde, oder startet. Diese Nachricht soll nicht von FHEM kommen, weshalb ich sie über das Script ausführen lasse.
FHEM auf Raspberry B+, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline mareb

  • New Member
  • *
  • Beiträge: 13
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #11 am: 07 Dezember 2016, 17:26:25 »
nja, ist wohl Geschmackssache...
ich denke nur, dass die Zeit von init.d nun endlich ist - daher versuche ich meinen Kram auf systemd umzustellen. (was ich nach anfänglicher Skepsis mittlerweile echt gut finde).

BTW: Um Sachen nach oder vor einem ExecStart auszuführen:
ExecStartPre=, ExecStartPost=
Nach einem ExecStop:
ExecStopPost=

Offline daywalkero

  • New Member
  • *
  • Beiträge: 22
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #12 am: 18 Dezember 2016, 11:57:51 »
Ich hab jetzt gemäß obigem Script fhem zum laufen gebracht. Füge ich hmcfgusb hinzu, passiert gar nichts, da startet auch fhem nicht. Bei Homebridge das selbe.
Kann mir jemand beim Anpassen helfen? Aktuell starte ich nach einem Reboot alles händisch.

hmcfgusb über die init.d von fhem starten klappt - aber Homebridge leider nicht.
« Letzte Änderung: 18 Dezember 2016, 13:16:55 von daywalkero »

Offline Amenophis86

  • Hero Member
  • *****
  • Beiträge: 1030
  • Anti-Statement befreite Zone ;)
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #13 am: 18 Dezember 2016, 16:21:37 »
Die # rausgenommen in der hmcfgusb Zeile bei Schritt 3??
FHEM auf Raspberry B+, Betriebssystem Jessy, HMLan, HM Komponenten, LD382A, Harmony Hub und vieles mehr. Einfach ein tolles universelles System

Offline daywalkero

  • New Member
  • *
  • Beiträge: 22
Antw:[HowTo] fhem als service unter systemd starten
« Antwort #14 am: 18 Dezember 2016, 16:26:42 »
Klar. Tut sich gar nichts. Hmcfgusb wäre auch nebensächlich, wie gesagt, den habe ich über das Script vom Fhem in init.d mit gestartet. Das funktioniert blöder Weise nicht mit Homebridge.

 

decade-submarginal