start-stop-daemon funktioniert nicht wie erwartet, es wurde keine pid-datei geschrieben

17

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 gut. Ich kann sehen, wie das Skript ausgeführt wird, aber der Stop-Teil funktioniert nicht. Es sagt einfachNo xx found running; none killed.

Also, ich denke, mit dem Startteil stimmt etwas nicht?

Gänseblümchen
quelle

Antworten:

22

start-stop-daemon --start --pidfile "$pid"Schreibt nur in die PID-Datei, wenn --make-pidfile( -m) angegeben ist. Ohne --make-pidfilees liegt an dem Programm, das gestartet wird, um es zu erstellen. Auch für --make-pidfiledie Arbeit kann der Prozess, der gestartet wird, sich nicht selbst (über eine Verzweigung) dämonisieren, da dann start-stop-daemonnicht bekannt ist, welche PID er in die Datei einfügen soll.

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


Wenn der Prozess immer noch nicht angehalten wird, müssen alle übergebenen Kriterien start-stop-daemon --stopübereinstimmen. Bedeutung $pidmuss ein laufender Prozess sein, die UID des Prozesses muss übereinstimmen $userund der Prozessname (arg0) muss übereinstimmen $name.
Sie können den Wert von arg0 bestimmen, indem Sie tunps h -p $pid -o comm

Patrick
quelle
Okay, das Pidfile ist geschrieben. Aber Stopp Teil funktioniert immer noch nicht, die gleiche Fehlermeldung
Daisy
@ warl0ck Ist die PID-Datei korrekt und stimmt die UID des Prozesses überein $user?
Patrick
Ja, ich sah-stop-daemon starten versuchte zu lesen /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326, so der Name sein sollte pythonstattdessen vielleicht?
Daisy
Fertig, Name ersetzt pythonund es hat funktioniert ;-P
daisy
Richtig, ja, $namemuss auch passen. Ich habe völlig verpasst, dass du das weitergegeben hast. Ich aktualisiere die Antwort.
Patrick