O supervisor sempre sai do processo com 'status de saída 0; inesperado'

13

Atualmente, estou reconstruindo meus vps e gostaria de usar o supervisor para gerenciar meus processos gunicorn / wsgi django. O problema é que o supervisor continua saindo dos processos:

2010-07-23 14:54:40,575 INFO supervisord started with pid 31391
2010-07-23 14:54:41,582 INFO spawned: 'projectx' with pid 31395
2010-07-23 14:54:41,691 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:42,695 INFO spawned: 'projectx' with pid 31401
2010-07-23 14:54:42,801 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:44,806 INFO spawned: 'projectx' with pid 31404
2010-07-23 14:54:44,912 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:47,917 INFO spawned: 'projectx' with pid 31408
2010-07-23 14:54:48,022 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:49,023 INFO gave up: projectx entered FATAL state, too many start retries too quickly

Esta é a configuração que estou usando:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
user=myuser
autostart=true
autorestart=true

Eu já verifiquei duas vezes e o gunicorn_django retorna o status 0 quando é gerado corretamente.

Tentei adicionar códigos de saída = 0,2 explicitamente à configuração, mas isso também não parece fazer diferença. Parece que o processo foi gerado corretamente, mas o supervisor acha que não.

Alguém tem uma idéia de como resolver isso?

Obrigado, Bjorn

Bjorn
fonte

Respostas:

12

Se o gunicorn_django estiver se daemonizando, não é o tipo de supervisor de programa projetado para gerenciar. O Supervisor espera que seus programas supervisionados sejam executados em primeiro plano, para que ele possa monitorar se eles saíram.

Consulte os documentos da supervisão .

Drew Bloechl
fonte
O gunicorn não se desonra por padrão, mas eu o configurei no meu arquivo de configuração. Eu o removi, obrigado por apontar isso.
Bjorn
4

Ok, depois de um pouco de confusão, descobri que tinha algo a ver com os usuários. Tentei executar os processos filho como um determinado usuário. Depois de remover a linha (veja minha configuração abaixo), tudo está funcionando bem.

Configuração do Gunicorn:

bind = "127.0.0.1:3305"
workers = 2

Configuração do supervisor:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
; set the user here instead of in the gunicorn config.
user=user
autostart=true
autorestart=unexpected
stdout_logfile=/path/to/project/logs/project.log
redirect_stderr=true
exitcodes=1
Bjorn
fonte
1
Apenas uma nota rápida de que, se você quiser aprofundar isso, usar o myuser e executar o gunicorn deve dar uma dica. Os suspeitos comuns são os arquivos de log e pid que não estão sendo graváveis. Como alternativa, seu aplicativo também pode precisar de permissões de arquivo. E apenas uma rápida observação de que, para um melhor suporte ao supervisor, você deve atualizar para 0,10, pois corrigimos um problema ao reiniciar o gunicorn via supervisord (ou runit, nesse caso).
Paul J. Davis
0

Ocorreu um erro semelhante ao tentar executar um daemon http sob supervisor.

Corrigido removendo o arquivo pid antigo: httpd_pid

caça ao pato
fonte