Por que “start-stop-daemon” gera dois processos?

3

O título da questão é o meu principal problema, e aqui está uma parte do meu arquivo SysVinit.

NAME="flask-daemon"
PIDFILE="/var/run/"$NAME".pid"
DAEMON="/home/ubuntu/flask/run.py"
DAEMON_USER=root

f_start() {
    echo -e "\nStarting : $NAME"
    start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --exec $DAEMON
}

Alguém sabe onde deve estar o erro?

Além disso, é terrível que, nessa situação, esteja apenas escrevendo o processo PID of ONE no pidfile. Portanto, se eu fizer /etc/init.d/flask-daemon stop , ele apenas mata o processo relacionado ao PID que foi considerado gravado no arquivo.

Processos (Porquê dois?):

ps aux | grep run.py
root      3591  3.0  1.7 132700 17460 ?        S    19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3595  4.5  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3602  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

arquivo PID:

$ cat /var/run/flask-daemon.pid
3591

Apenas um processo foi morto ...

ps aux | grep run.py
root      3595  0.3  1.7 213144 18080 ?        Sl   19:27   0:00 /usr/bin/python /home/ubuntu/flask/run.py
root      3613  0.0  0.0  10460   948 pts/0    S+   19:27   0:00 grep --color=auto run.py

Observação: > Eu também tentei usar --startas , mas ele também gera dois processos, e um dos piores: ele registra o PID de qualquer outro processo em /var/run/flask-daemon.py , com exceção dos PIDs dos daemons

    
por ivanleoncz 09.06.2016 / 22:16

1 resposta

3

Supondo que você esteja executando o daemon no modo daemon, ele cria uma cópia de si mesmo quando é iniciado.

Acho que isso pode ser o que a parte "l" de "Sl" significa na coluna STAT da sua saída de ps.

Eu tenho usado o python-daemon um pouco recentemente e se é isso que seu script está usando, você pode dizer se separa o processo ou não no construtor do seu daemoncontext, apenas diga para não fazer isso e você deveria ser de ouro.

-OU -

não use o daemon start-stop e apenas faça um serviço systemd que utilize o flag detach_process.

-OU -

Faça as duas coisas e informe ao seu processo se deseja ou não destacar o processo.

    
por 09.06.2016 / 23:21