Systemd causando vários processos de supervisor

3

Estou tendo um problema em restringir onde a questão é minha configuração de supervisor que faz com que um programa seja duplicado.

Estou executando um servidor Web Python Tornado por meio de um proxy reverso Nginx. Eu acho que o problema está mais relacionado ao supervisor, no entanto.

/etc/supervisor/supervisord.conf

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor           
logfile_maxbytes=50MB                           
logfile_backups=5                               
loglevel=error                                  

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf

/etc/supervisor/conf.d/tornado.conf

[program:tornado]
numprocs = 4
numprocs_start = 8000
process_name = %(program_name)s_%(process_num)02d
directory=/home/username/webapp
environment=PATH="/home/username/.virtualenvs/tornado_env/bin"
command = python server.py --port=%(process_num)s
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/webapp/%(program_name)s_%(process_num)02d.log
loglevel=info

Como você pode ver numprocs = 4 , mas minha confusão vem disso depois de reiniciar o servidor.

ps -aux | egrep "supervisor|python"

root       399  0.1  2.6  14496  9584 ?        Ss   15:48   0:03 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
www-data   410  0.1  3.9  16872 14200 ?        S    15:48   0:02 python server.py --port=8002
www-data   411  0.1  3.9  16872 14180 ?        S    15:48   0:02 python server.py --port=8003
www-data   412  0.1  3.9  16872 14124 ?        S    15:48   0:02 python server.py --port=8000
www-data   413  0.1  3.9  16872 14180 ?        S    15:48   0:02 python server.py --port=8001
www-data   489  0.0  3.0  16872 11024 ?        S    15:49   0:00 python server.py --port=8003
www-data   490  0.0  3.1  16872 11228 ?        S    15:49   0:00 python server.py --port=8000
www-data   491  0.0  3.1  16872 11244 ?        S    15:49   0:00 python server.py --port=8002
www-data   492  0.0  3.0  16872 11192 ?        S    15:49   0:00 python server.py --port=8001

Existem 8 processos Python, mas o supervisor só sabe 4. O que mais eu procuro?

sudo supervisorctl status

tornado:tornado_8000             RUNNING    pid 412, uptime 0:36:03
tornado:tornado_8001             RUNNING    pid 413, uptime 0:36:03
tornado:tornado_8002             RUNNING    pid 410, uptime 0:36:05
tornado:tornado_8003             RUNNING    pid 411, uptime 0:36:04

UPDATE : de alguma forma, a execução de supervisor e systemd está gerando uma configuração duplicada. Então, agora, a minha pergunta é se desativo o serviço supervisor e, em caso afirmativo, o que mais está causando isso?

sudo systemctl status supervisor

● supervisor.service - LSB: Start/stop supervisor
   Loaded: loaded (/etc/init.d/supervisor)
   Active: active (running) since Wed 2015-12-23 15:48:45 CST; 1h 31min ago
  Process: 305 ExecStart=/etc/init.d/supervisor start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/supervisor.service
           ├─399 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
           ├─489 python server.py --port=8003
           ├─490 python server.py --port=8000
           ├─491 python server.py --port=8002
           └─492 python server.py --port=8001
    
por cricket_007 23.12.2015 / 23:27

1 resposta

1

Após uma investigação mais aprofundada, o problema foi realmente o meu Python Tornado Server. Foi forking um processo por CPU, o que me confunde em um único núcleo Raspberry Pi, mas tanto faz.

Assim, a saída dos comandos acima é válida; não há "duplicatas" do supervisor ou do Systemd. O problema estava mais relacionado ao gerenciamento do ciclo de vida desses processos pelo supervisor, ou seja, iniciar, parar, recarregar.

Quando eu pararia antes, os processos bifurcados permaneceriam ativos, então quando eu fosse para reiniciar o supervisor, eu obteria um total de 4 + 8 = 12 processos.

A correção foi adicionar essa linha ao meu /etc/supervisor/conf.d/tornado.conf .

stopasgroup=true

Para o qual a documentação é lida

If true, the flag causes supervisor to send the stop signal to the whole process group and implies killasgroup is true. This is useful for programs, such as Flask in debug mode, that do not propagate stop signals to their children, leaving them orphaned.

    
por 24.12.2015 / 10:12