start-stop-daemon não funciona como esperado, nenhum arquivo pid foi gravado

start-stop-daemon não funciona como esperado, nenhum arquivo pid foi gravado

Estou tentando controlar um programa baseado em python (que não se separa 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. Posso ver o script em funcionamento, mas a parte stop não. Simplesmente dizNo xx found running; none killed.

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

Responder1

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

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


Se o processo ainda não estiver parando, todos os critérios passados start-stop-daemon --stop​​deverão 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

informação relacionada