start-stop-daemon não está funcionando como esperado, nenhum arquivo pid foi gravado

17

Estou tentando controlar um programa baseado em python (que não se desconecta do console)

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

A parte inicial funciona bem. Eu posso ver o script em funcionamento, mas a parte de parada não. Simplesmente dizNo xx found running; none killed.

Então acho que há algo errado com a parte inicial?

margarida
fonte

Respostas:

22

start-stop-daemon --start --pidfile "$pid"não grava no arquivo pid, a menos que --make-pidfile( -m) seja especificado. Sem --make-pidfileisso, o programa será lançado para criá-lo. Também para o --make-pidfiletrabalho, o processo que está sendo iniciado não pode se daemonizar (por meio de um fork), pois start-stop-daemonnão saberá qual PID deve colocar no arquivo.

A única coisa que --pidfile "$pid"faz no seu cenário de uso é que isso resultará em start-stop-daemonnão iniciar o programa se ele já estiver em execução.


Se o processo ainda não estiver parando, todos os critérios passados ​​para start-stop-daemon --stopdevem corresponder. O significado $piddeve ser um processo em execução, o UID do processo deve corresponder $usere o nome do processo (arg0) deve corresponder $name.
Você pode determinar o valor de arg0 fazendops h -p $pid -o comm

Patrick
fonte
Ok, o pidfile está escrito. Mas parada parte ainda não está funcionando, mesma mensagem de erro
daisy
@ warl0ck o arquivo pid está correto e o UID do processo corresponde $user?
Patrick
Sim, vi o start-stop-daemon tentando ler /proc/pid/stat: read(4, "5559 (python) S 1 5558 5558 0 -1"..., 1024) = 326então o nome deveria ser, pythontalvez?
daisy
Feito, nome substituído para pythone funcionou ;-P
daisy
Certo, sim, $nametem que combinar também. Perdeu completamente que você estava passando isso. Atualizará a resposta.
Patrick