Benutzer:Benheim/Startscript systemd

Aus FHEMWiki

Startscript für FHEM

Für Linux-Versionen, die als Startsystem systemd einsetzen, kann folgende Unit (systemd-Bezeichnung für Startscripts) verwendet werden: der Dateiname lautet dann fhem.service

[Unit]
Description=FHEM service
After=network.target
Wants=hmland.service

[Service]
Type=forking
User=fhem
Group=dialout
WorkingDirectory=/opt/fhem
ExecStart=/usr/bin/perl fhem.pl fhem.cfg

[Install]
WantedBy=multi-user.target

Da der FHEM-Prozess sich nach dem Starten vom Eingabe-Terminal löst und im Hintergrund läuft, muss der Typ mit Type=forking angegeben werden werden.

Startscript für einen unterstützenden Dienst

Für das Starten des HomeMatic-Daemons hmland ist ein ähnliches Unit verantwortlich: hier lautet der Dateiname dann hmland.service

[Unit]
Description=Homematic LAN Adapter service
After=network.target

[Service]
ExecStart=/usr/local/bin/hmland -p 1234

[Install]
WantedBy=multi-user.target

hmland gibt den Prompt nach dem Starten nicht wieder frei, wenn die Option -d nicht gesetzt ist. In diesem Fall kann eine Angabe von Type= entfallen.

Installation und Aktivierung

Die Dateien kommen ins Verzeichnis /etc/systemd/system. Sie sollten nicht ausführbar gemacht werden. Der Start klappt auch mit ausführbaren Dateien, aber im Log (journalctl) lösen ausführbare Dateien eine Warnung aus.

Nun muss einmalig der Befehl

systemctl daemon-reload

eingegeben werden, damit die neuen Dateien eingelesen werden. Mit dem Befehl

systemctl enable fhem.service

wird dafür gesorgt, dass bei einem Systemstart FHEM automatisch gestartet wird (ein symbolischer Link im mit WantedBy= wird erstellt). Der automatische Start lässt sich mit

systemctl disable fhem.service

wieder deaktivieren.

Starten, Stoppen und Statusabfrage

Erfolgt ähnlich wie beim klassischen SysV-Init:

  • systemctl start fhem
  • systemctl stop fhem
  • systemctl status fhem

Abhängigkeiten

Durch den Eintrag in der Unit für FHEM Wants=hmland.service wird dafür gesorgt, dass vor dem Start von FHEM der Daemon für den HomeMatic-Stick gestartet wird. Es können mehrere Dienste aufgelistet werden, die vorher gestartet werden müssen:

Wants=hmland.service knxd.service

Diese Units müssen darum nicht für den automatischen Start "enabled" werden. Sollte einer dieser Dienste nicht gestartet werden können, wird FHEM trotzdem gestartet.

Links

Systemd-Dokumentation: