Hallo,
ich habe mich mal wieder an mein kleines Projekt gesetzt, das mit die Namen oder Telefonnummern der Anrufer (Namen auf dem FritzBox-Telefonbuch) vorlesen soll.
Da das ganze auf einem PI mit Stretch läuft, habe ich eine Unit gezimmert, die auch funktioniert. Fast funktioniert.
Was nicht funktioniert, ist das erstellen einer PID-Datei.
Die Unis sieht so aus:
[Unit]
Description=Anrufernummer lesen und Vorlesen
After=network.target
[Service]
Type=simple
User=pi
ExecStart=/home/pi/scripte/nummer_lesen.py
Restart=always
PIDFile=/var/run/rufnummer.pid
#ExecStartPost=/bin/bash -c /root/script/rufnummer-pid.sh
[Install]
WantedBy=multi-user.target
Alles anzeigen
Und funktioniert wunderbar.
Entferne ich die # vor 'ExecstartPost' bricht der ganze Spaß ab.
Meldung:
Job for rufnummer.service failed because the control process exited with error code.
See "systemctl status rufnummer.service" and "journalctl -xe" for details.
root@Telefonansage-PI:/etc/systemd/system# systemctl status rufnummer.service
● rufnummer.service - Anrufernummer lesen und Vorlesen
Loaded: loaded (/etc/systemd/system/rufnummer.service; disabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2019-03-14 18:11:25 CET; 8s ago
Process: 1560 ExecStartPost=/bin/bash -c /root/script/rufnummer-pid.sh (code=exited, status=126)
Process: 1559 ExecStart=/home/pi/scripte/nummer_lesen.py (code=killed, signal=TERM)
Main PID: 1559 (code=killed, signal=TERM)
Mär 14 18:11:24 Telefonansage-PI systemd[1]: Failed to start Anrufernummer lesen und Vorlesen.
Mär 14 18:11:24 Telefonansage-PI systemd[1]: rufnummer.service: Unit entered failed state.
Mär 14 18:11:24 Telefonansage-PI systemd[1]: rufnummer.service: Failed with result 'exit-code'.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: rufnummer.service: Service hold-off time over, scheduling restart.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: Stopped Anrufernummer lesen und Vorlesen.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: rufnummer.service: Start request repeated too quickly.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: Failed to start Anrufernummer lesen und Vorlesen.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: rufnummer.service: Unit entered failed state.
Mär 14 18:11:25 Telefonansage-PI systemd[1]: rufnummer.service: Failed with result 'exit-code'.
Alles anzeigen
In der Datei, welche die PID lesen und schreiben soll, steht:
#!/bin/bash
/bin/ps -ef|/bin/grep nummer_lesen.py|/bin/grep -v grep|/usr/bin/awk '{print $2}' > /tmp/rufnummer.pid
#/bin/ps -ef|/bin/grep nummer_lesen.py|/bin/grep -v grep|/usr/bin/awk '{print $2}' > /var/run/rufnummer.pid
Rufe ich dieses Script so auf, wie es dort steht, mit der ersten Zeile oder der zweiten Zeile. wird diese Datei geschrieben. Aber eben nicht aus der Unit.
Der Verschlag im Internet mit
funktioniert theoretisch. Nämlich nur, wenn der Aufruf
geschrieben wird, was unpraktisch ist, wenn man mehrere Python-Programm am laufen hat.
Denn dann gibt es nicht nur eine PID.
Hat jemand eine Idee, wie man die richtige PID bekommt und systemd nicht mault?