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

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

Estoy intentando 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 inicial 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 algún problema con la parte inicial?

Respuesta1

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

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


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

información relacionada