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-pidfile
que funcione, el proceso que se inicia no puede demonizarse (a través de una bifurcación), ya que entonces start-stop-daemon
no 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-daemon
si ya se está ejecutando.
Si el proceso aún no se detiene, todos los criterios pasados start-stop-daemon --stop
deben coincidir. El significado $pid
tiene que ser un proceso en ejecución, el UID del proceso tiene que coincidir $user
y el nombre del proceso (arg0) tiene que coincidir $name
.
Puedes determinar el valor de arg0 haciendops h -p $pid -o comm