python script in /etc/init.d falsche PID_ID

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo!

    Ich starte ein python script mittels der init.d Befehle. Genau sieht dieser wie folgt aus:

    PATH=/bin:/usr/bin:/sbin:/usr/sbin
    DAEMON=/home/pi/python/HomeAutomation/ha_collect.sh
    PIDFILE=/var/run/ha_collect.pid
    DAEMON_USER=root
    DAEMON_OPTS=""

    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --ch$

    in der ha_collect.sh steht folgendes:
    #!/bin/sh
    script='/home/pi/python/HomeAutomation/ha_collect.py'
    /usr/bin/python $script &


    Der Aufruf klappt auch, nur ist leider die PID-ID in der Datei immer falsch. Sie ist immer um den Wert 1 im File zu klein. Daher klappt dann die Restart und Stop Routine nicht. Weiß jemand woran das liegt? Besser wärewie man das umgeht?


  • Wenn es immer eins zu wenig würde ich es einfach um 1 erhöhen ;).

    das ist lustig. Weil ja das PID File automatisch geschrieben wird und beim stoppen auch automatisch geladen wird. Man kommt an die Zahl nicht so einfach ran...


    Und warum man ein Python-Script aus einem Bash-Script heraus startet werde ich wohl nie verstehen.

    Wie würde das dann anders gehen?

    • Offizieller Beitrag

    naja ein

    Code
    DAEMON=/home/pi/python/HomeAutomation/ha_collect.py

    Reicht doch schon. Vorausgesetzt die Datei ist ausführbar und hat die passende python shebang, steht einem direkten ausführen nichts mehr im Wege. :)

    Schau dir mal dieses init script an. Warum sollte man dort $PID nicht ggf um 1 erhöhen können?

    • Offizieller Beitrag

    Ich hab grad mal meinen Verlinkten Link (auch eine tolle wort Konstruktion) nachgebaut, funktioniert wie erwartet inkl. richtiger PID. Wenn die PID vom TE allerdings IMMER eins zu niedrig ist, würde ich, pragmatisch wie ich bin, die 1 wirklich dazu addieren. Ich bin mir durchaus bewusst, das das nur funktioniert wenn IMMER wirklich IMMEr bedeutet..man will ja nicht irgendeinen anderen Prozess killen ;)

  • Vermutlich liegt die Ursache in dem &. (Just my guess)

    Wenn in Task mit der Pid n eine Subtask mit & gestartet wird bekommt diese - sofern das System kaum neue Tasks generiert - die Pid n+1. In einem heavy loaded System ist es aber eher n+m (m>1).


  • ..., nur ist leider die PID-ID in der Datei immer falsch. Sie ist immer um den Wert 1 im File zu klein. ...

    Das könnte die PID vom shell-Script sein. Zum Nachschauen könntest Du temporär die PIDs der beiden Scripte (shell und python) z. B. in die syslog eintragen/loggen lassen. Wenn Du dann festgestellt hast welches die richtige PID ist, dann kannst diese PID, vom zuständigen Script in die Datei "/var/run/ha_collect.pid" schreiben lassen.

    The most popular websites without IPv6 in Germany.  IPv6-Ausreden

    Meine PIs

    PI4B/8GB (border device) OpenBSD 7.4 (64bit): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server

    PI3B+ FreeBSD 14.0-R-p3 (arm64): SSH-Serv., WireGuard-Serv., ircd-hybrid-Serv., stunnel-Proxy, Mumble-Serv., ddclient

    PI4B/4GB Bullseye-lite (64bit; modifiziert): SSH-Server, WireGuard-Server, ircd-hybrid-Server, stunnel-Proxy, Mumble-Server, botamusique, ample

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!