• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[Gelöst] 'eibd' via systemd als Service starten

gehrke

Administrator
Teammitglied
Moin *,

auf einem CentOS7 habe ich das Paket 'eibd' via RPM installiert, allerdings nicht von CentOS/EPEL. Von Hand gestartet läuft alles gut. Ich scheitere aber nun daran, dies via systemd automatisch beim Systemstart einzubinden.

Hierzu habe ich eine Unit erstellt:
Code:
[root@smarthome ~]# cat /etc/systemd/system/eibd.service
[Unit]
Description=EIB Daemon
After=network.target

[Service]
ExecStart=/bin/eibd -p /run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Type=forking
PIDFile=/run/eibd.pid
User=knx

[Install]
WantedBy=multi-user.target
Der Start schlägt mit einem Timeout fehl:
Code:
[root@smarthome ~]# date; systemctl start eibd.service
So 3. Jul 13:43:16 CEST 2016
Job for eibd.service failed because a timeout was exceeded. See "systemctl status eibd.service" and "journalctl -xe" for details.
Code:
Jul 03 13:43:16 smarthome.gehrke.local polkitd[609]: Registered Authentication Agent for unix-process:3646:5324904 (system bus name :1.95 [/usr/bin/pkttyagent --notify-fd 5 --fallback], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale de_DE.UTF-8)
Jul 03 13:43:16 smarthome.gehrke.local systemd[1]: Starting EIB Daemon...
Jul 03 13:43:17 smarthome.gehrke.local systemd[1]: PID file /run/eibd.pid not readable (yet?) after start.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: eibd.service start operation timed out. Terminating.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: Failed to start EIB Daemon.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: Unit eibd.service entered failed state.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: eibd.service failed.
Jul 03 13:44:47 smarthome.gehrke.local polkitd[609]: Unregistered Authentication Agent for unix-process:3646:5324904 (system bus name :1.95, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale de_DE.UTF-8) (disconnected from bus)
Code:
[root@smarthome ~]# systemctl status eibd.service
● eibd.service - EIB Daemon
   Loaded: loaded (/etc/systemd/system/eibd.service; enabled; vendor preset: disabled)
   Active: failed (Result: timeout) since So 2016-07-03 13:44:47 CEST; 13min ago
  Process: 3651 ExecStart=/bin/eibd -p /run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx (code=exited, status=0/SUCCESS)
 Main PID: 2042 (code=exited, status=0/SUCCESS)

Jul 03 13:43:16 smarthome.gehrke.local systemd[1]: Starting EIB Daemon...
Jul 03 13:43:17 smarthome.gehrke.local systemd[1]: PID file /run/eibd.pid not readable (yet?) after start.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: eibd.service start operation timed out. Terminating.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: Failed to start EIB Daemon.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: Unit eibd.service entered failed state.
Jul 03 13:44:47 smarthome.gehrke.local systemd[1]: eibd.service failed.
Jul 03 13:48:07 smarthome.gehrke.local systemd[1]: Stopped EIB Daemon.
Es scheint nicht am User zu liegen. Wenn ich den gegen meinen personaliserten User tausche, bekomme ich die selbe Fehlermeldung.
Wobei der manuelle Aufruf mit diesem User funktioniert:
Code:
[gehrke@smarthome ~]$ eibd -p /var/run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
[gehrke@smarthome ~]$ ps aux | grep eibd
gehrke      3826  0.0  0.1  21876  1080 ?        Ss   14:26   0:00 eibd -p /var/run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Was läuft da schief?
TNX

cu, gehrke
 
OP
gehrke

gehrke

Administrator
Teammitglied
Sauerland schrieb:
https://wiki.agocontrol.com/index.php/KNX
https://knx-user-forum.de/
Die Seiten kenne ich. In einer bin ich aktiv, die andere war die Vorlage. Aber inwiefern soll mir das jetzt helfen? Ich vermute, dass ich hier einen Fehler in der Konfiguration von systemd habe. Und damit bin ich wohl (zumindest vorläufig) besser hier aufgehoben.
TNX
 

Sauerland

Ultimate Guru
Das konnte ich nicht wissen, hast du ja nicht geschrieben.......
PIDFile=/run/eibd.pid
User=knx
Hast Du einmal versucht, das eibd.pid in ein Verzeichnis unterhalb von /run (/run/eibd/) hineinzulegen, in dem Du auch Schreibrechte hast?
 

spoensche

Moderator
Teammitglied
Beim Systemd Start verwendest du /run/eibd.pid.
Code:
/bin/eibd -p /run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx

Beim manuellen start verwendest du /var/run/eibd.pid
Code:
eibd -p /var/run/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx

Verwende also im systemd Job den gleichen Pfad wie beim manuellen aufruf.
 
OP
gehrke

gehrke

Administrator
Teammitglied
Danke für die Antworten.
Sauerland schrieb:
Das konnte ich nicht wissen, hast du ja nicht geschrieben.......
OK

Ich habe den Speicherort für das PID-File geändert (Schreibrechte passend gesetzt):
Code:
[root@smarthome ~]# cat /etc/systemd/system/eibd.service
[Unit]
Description=EIB Daemon
After=network.target

[Service]
ExecStart=/bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Type=forking
PIDFile=/run/eibd/eibd.pid
User=knx

[Install]
WantedBy=multi-user.target
Ich habe eine neue Beobachtung gemacht: Nach einem Boot-Vorgang startet dieser Daemon scheinbar für kurze Zeit korrekt und ist in dieser Zeit auch voll funktional:
Code:
[root@smarthome ~]# systemctl status eibd.service
● eibd.service - EIB Daemon
   Loaded: loaded (/etc/systemd/system/eibd.service; enabled; vendor preset: disabled)
   Active: activating (start) since So 2016-07-03 21:22:38 CEST; 23s ago
  Process: 829 ExecStart=/bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/eibd.service
           └─860 /bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
In dieser Zeit kann ich tatsächlich auf den KNX-Bus zugreifen.
Code:
[gehrke@smarthome ~]$ ps aux | grep eibd
root      2038  0.0  0.1 128396  1188 pts/0    S+   21:32   0:00 systemctl start eibd.service
knx       2044  0.0  0.1  21952  1208 ?        Ss   21:32   0:00 /bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Dann kommt es aber auch wieder zu einem Timeout:
Code:
[root@smarthome ~]# journalctl -f
-- Logs begin at So 2016-07-03 21:22:14 CEST. --
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: eibd.service start operation timed out. Terminating.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Failed to start EIB Daemon.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Unit eibd.service entered failed state.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: eibd.service failed.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Reached target Multi-User System.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Starting Multi-User System.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Started Stop Read-Ahead Data Collection 10s After Completed Startup.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Starting Update UTMP about System Runlevel Changes...
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Started Update UTMP about System Runlevel Changes.
Jul 03 21:24:08 smarthome.gehrke.local systemd[1]: Startup finished in 434ms (kernel) + 2.756s (initrd) + 1min 51.645s (userspace) = 1min 54.836s.
Auch bei nachfolgenden Starts via
Code:
systemctl start eibd.service
zeigt sich das selbe Verhalten: für 90 Sekunden ist alles gut, danach verschwindet der Prozess wieder.

Danach habe ich die Unit nochmals hinsichtlich des Speicherorts für das PID geändert:
Code:
[...]
ExecStart=/bin/eibd -p /home/knx/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
PIDFile=/home/knx/eibd.pid
Damit scheint es jetzt stabil zu laufen - jedenfalls deutlich länger als zuvor. Scheinbar ist '/run/*' keine gute Wahl unter CentOS!?!
 
OP
gehrke

gehrke

Administrator
Teammitglied
Ich rätsel immer noch, wo der richtige Ort für userspezifische PID-Files unter CentOS ist.

Sehr oft sehe ich bei Recherchen /var/run, aber das ist nur ein SymLink:
Code:
lrwxrwxrwx. 1 root root 6 18. Jun 12:43 /var/run -> ../run
Die PIDs des Systems liegen (fast) alle in /run:
Code:
[root@smarthome ~]# find / -iname '*.pid' -ls
 16065    4 -rw-r--r--   1 root     root            4 Jul  3 21:22 /run/sshd.pid
 16025    4 -rw-r-----   1 root     root            4 Jul  3 21:22 /run/bacula-fd.9102.pid
 15152    4 -rw-r--r--   1 root     root            4 Jul  4 08:48 /run/dhclient-eth0.pid
 14613    4 -rw-r--r--   1 root     root            4 Jul  3 21:22 /run/crond.pid
 14206    4 -rw-------   1 root     root            4 Jul  3 21:22 /run/syslogd.pid
 14127    4 -rw-r--r--   1 root     root            4 Jul  3 21:22 /run/chronyd.pid
 13662    4 -rw-r--r--   1 root     root            4 Jul  3 21:22 /run/auditd.pid
 17218    4 -rw-r--r--   1 root     root            3 Jul  3 21:22 /run/tuned/tuned.pid
 11917    4 -rw-r--r--   1 root     root            4 Jul  3 21:22 /run/lvmetad.pid
34273014    4 -rw-------   1 root     root           33 Jul  3 21:22 /var/spool/postfix/pid/master.pid
18044712    4 -rw-r--r--   1 knx      knx             4 Jul  3 21:45 /home/knx/eibd.pid
Einzige Ausnahme ist /var/spool
 

josef-wien

Ultimate Guru
Korrigiert vielleicht irgendeine im Hintergrund laufende "Sicherheitsprüfung" ständig aus ihrer Sicht falsche Berechtigungen?
 
OP
gehrke

gehrke

Administrator
Teammitglied
Gräfin Klara schrieb:
KNX bzw. EIB hat keine klassische Protokoll client/server struktur.
Ist der Bus aktiv und erreichbar?
gehrke schrieb:
Nach einem Boot-Vorgang startet dieser Daemon scheinbar für kurze Zeit korrekt und ist in dieser Zeit auch voll funktional
[...]
In dieser Zeit kann ich tatsächlich auf den KNX-Bus zugreifen.
 
OP
gehrke

gehrke

Administrator
Teammitglied
josef-wien schrieb:
Korrigiert vielleicht irgendeine im Hintergrund laufende "Sicherheitsprüfung" ständig aus ihrer Sicht falsche Berechtigungen?
Es sieht ganz so aus. Folgendes habe ich getestet:
Code:
[root@smarthome ~]# mkdir /run/eibd; chown -R knx:knx /run/eibd
[root@smarthome ~]# su - knx
Letzte Anmeldung: Sonntag, den 03. Juli 2016, 18:18:36 CEST auf pts/0
[knx@smarthome ~]$ touch /run/eibd/test.txt
[knx@smarthome ~]$ ls -ltar /run/eibd/test.txt
-rw-rw-r--. 1 knx knx 0  4. Jul 15:14 /run/eibd/test.txt
Danach die Unit neu konfiguriert und den Dienst gestartet:
Code:
ExecStart=/bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Type=forking
[...]
PIDFile=/run/eibd/eibd.pid
Code:
[root@smarthome ~]# systemctl daemon-reload         
[root@smarthome ~]# systemctl stop eibd.service              
[root@smarthome ~]# systemctl start eibd.service
Das lief dann 10 Minuten problemlos, die PID wurde auch mit 4-Bytes-Größe erstellt und funktional war es auch. Bis ich einen Neustart durchgeführt habe.

Nach dem Neustart war das komplette Verzeichnis weg:
Code:
[root@smarthome ~]# ls -ltar /run/eibd
ls: Zugriff auf /run/eibd nicht möglich: Datei oder Verzeichnis nicht gefunden
 
OP
gehrke

gehrke

Administrator
Teammitglied
gehrke schrieb:
Nach dem Neustart war das komplette Verzeichnis weg:
Oops, tmpfs...
Code:
[root@smarthome ~]# df -h /run
Dateisystem    Größe Benutzt Verf. Verw% Eingehängt auf
tmpfs           497M    6,6M  491M    2% /run
http://askubuntu.com/questions/303120/how-folders-created-in-var-run-on-each-reboot
The new tmpfs-mounted /run folder allows programs like udev, lvm and mdadm to keep runtime data from initrd until shutdown.
[...]
Startup scripts usually create the directories they need before using them. If you want to store a PID-file either put it in /var/run directly or create a directory before creating the PID-file. This is no place to store data that needs to remain there across reboots.
 

josef-wien

Ultimate Guru
gehrke schrieb:
Nach dem Neustart war das komplette Verzeichnis weg
Das sieht danach aus, daß /run im Hauptspeicher liegt. In diesem Fall muß das Verzeichnis bei jedem Systemstart erstellt und berechtigt werden (siehe man systemd-tmpfiles). Nachtrag: Ich sehe gerade, das hast Du schon bemerkt.

gehrke schrieb:
Das lief dann 10 Minuten problemlos
Das deutet jetzt darauf hin, daß bei Deinen ersten Versuchen *.pid mangels Berechtigung nicht geschrieben werden konnte und die Probleme daraus resultierten.
 
OP
gehrke

gehrke

Administrator
Teammitglied
josef-wien schrieb:
man systemd-tmpfiles
Danke auch für diesen Tipp.

Ich glaube, jetzt habe ich es. Hier die letzte Fassung:
Code:
[root@smarthome ~]# cat /etc/systemd/system/eibd.service
[Unit]
Description=EIB Daemon
After=network.target

[Service]
ExecStart=/bin/eibd -p /run/eibd/eibd.pid -D -S -T -i --eibaddr=1.1.1 --daemon --no-tunnel-client-queuing ipt:knx
Type=forking
PIDFile=/run/eibd/eibd.pid
User=knx
Group=knx

[Install]
WantedBy=multi-user.target
Diese Konfiguration sorgt dafür, dass beim Systemstart ein entsprechendes Verzeichnis innerhalb des volatilen Speicherbereiches angelegt wird:
Code:
[root@smarthome ~]# cat /etc/tmpfiles.d/eibd.conf 
d /run/eibd 0775 knx knx -
War mein erster größerer Berührungspunkt mit systemd. Ich erlaube mir zu sagen, dass ich es gar nicht so schlecht finde...

Vielen Dank an alle Beteiligten.

cu, gehrke
 
gehrke schrieb:
Gräfin Klara schrieb:
KNX bzw. EIB hat keine klassische Protokoll client/server struktur.
Ist der Bus aktiv und erreichbar?
gehrke schrieb:
Nach einem Boot-Vorgang startet dieser Daemon scheinbar für kurze Zeit korrekt und ist in dieser Zeit auch voll funktional
[...]
In dieser Zeit kann ich tatsächlich auf den KNX-Bus zugreifen.

Hatte ich übersehen

Bist du mit ethernet oder TPUart am Bus?
 
Oben