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

15

Estou tentando controlar um programa baseado em python (que não se destaca 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. Ele simplesmente diz No xx found running; none killed.

Então, eu acho que tem algo errado com a parte inicial?

    
por daisy 17.06.2014 / 03:51

1 resposta

19

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

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

Se o processo ainda não estiver sendo interrompido, todos os critérios passados para start-stop-daemon --stop deverão corresponder. O significado $pid deve ser um processo em execução, o UID do processo deve corresponder a $user e o nome do processo (arg0) deve corresponder a $name .
Você pode determinar o valor de arg0 fazendo ps h -p $pid -o comm

    
por 17.06.2014 / 04:17