start-stop-daemon no funciona como se esperaba, no se escribió ningún archivo pid

17

Estoy tratando de controlar un programa basado en Python (que no se separa de la consola)

#!/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

La parte de inicio funciona bien. Puedo ver el script en funcionamiento, pero la parte de detención no. Simplemente diceNo xx found running; none killed.

¿Entonces supongo que hay algo mal con la parte inicial?

margarita
fuente

Respuestas:

22

start-stop-daemon --start --pidfile "$pid"no escribe en el archivo pid a menos que se especifique --make-pidfile( -m). Sin --make-pidfileesto, depende del programa que se inicie para crearlo. Además, para --make-pidfileque funcione, el proceso que se está iniciando no puede demonizarse a sí mismo (a través de una bifurcación), ya que entonces start-stop-daemonno sabrá qué PID debe poner en el archivo.

Lo único que --pidfile "$pid"hace en su escenario de uso es que no se start-stop-daemoniniciará el programa si ya se está ejecutando.


Si el proceso aún no se detiene, todos los criterios pasados start-stop-daemon --stopdeben coincidir. El significado $piddebe ser un proceso en ejecución, el UID del proceso debe coincidir $usery el nombre del proceso (arg0) debe coincidir $name.
Puede determinar el valor de arg0 haciendops h -p $pid -o comm

Patricio
fuente
De acuerdo, el archivo pid está escrito. Pero parada parte siguen sin funcionar, el mismo mensaje de error
margarita
@ warl0ck es el archivo pid correcto, y ¿coincide el UID del proceso $user?
Patrick
Sí, vi que start-stop-daemon trató de leer /proc/pid/stat: ¿ read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326entonces pythonquizás debería ser el nombre ?
margarita
Hecho, nombre sustituido pythony funcionó ;-P
margarita
Claro, sí, $nametiene que coincidir también. Perdí por completo que estuvieras pasando eso. Actualizará la respuesta.
Patrick