Start-Stop-Daemon funktioniert nicht wie erwartet, es wurde keine PID-Datei geschrieben

Start-Stop-Daemon funktioniert nicht wie erwartet, es wurde keine PID-Datei geschrieben

Ich versuche, ein Python-basiertes Programm zu steuern (das sich nicht von der Konsole löst).

#!/bin/bash

user=nobody
pid=/var/run/xx.pid
name=xx
prog=/xx.py

case $1 in
    start)
        /sbin/start-stop-daemon --start -b --oknodo --user "$user" --name "$name" --pidfile "$pid" --startas "$prog" --chuid nobody -- --daemon
        ;;
    stop)
        /sbin/start-stop-daemon --stop --oknodo --user "$user" --name "$name" --pidfile "$pid" --retry=TERM/5/KILL/1
        ;;
    restart)
        ;;
    *)
        ;;
esac

Der Startteil funktioniert einwandfrei. Ich kann sehen, dass das Skript läuft, aber der Stoppteil nicht. Es heißt einfachNo xx found running; none killed.

Ich nehme also an, dass mit dem Startteil etwas nicht stimmt?

Antwort1

start-stop-daemon --start --pidfile "$pid"schreibt nicht in die PID-Datei, es sei denn, --make-pidfile( -m) ist angegeben. Ohne --make-pidfilediese Option muss das gestartete Programm die Datei erstellen. Damit dies --make-pidfilefunktioniert, darf sich der gestartete Prozess auch nicht selbst als Daemon ausführen (über einen Fork), da er dann start-stop-daemonnicht weiß, welche PID er in die Datei schreiben soll.

Das Einzige, --pidfile "$pid"was in Ihrem Nutzungsszenario passiert, ist, dass start-stop-daemondas Programm nicht gestartet wird, wenn es bereits ausgeführt wird.


Wenn der Prozess immer noch nicht anhält, müssen alle an übergebenen Kriterien start-stop-daemon --stopübereinstimmen. Das bedeutet, $piddass es sich um einen laufenden Prozess handeln muss, die UID des Prozesses muss übereinstimmen $userund der Prozessname (arg0) muss übereinstimmen $name.
Sie können den Wert von arg0 ermitteln, indem Sie Folgendes tun:ps h -p $pid -o comm

verwandte Informationen