Eu tenho um proxy web Nginx, um servidor web gunicorn e um aplicativo web python/flask. O processo Gunicorn aparentemente morreu, e quero melhorar isso no futuro, procurando um utilitário que possa monitorar e reiniciar o processo gunicorn caso ele trave novamente.
Encontrei vários utilitários de supervisão de processos que podem fazer o trabalho:
- Daemon Tools
- lançamento
- executá-lo
- s6
- Supervisor
- SistemaD
- subir na vida
- ...
Existe um artigo abrangente que compara e contrasta os vários utilitários usados para monitorar e reiniciar um processo?
Responder1
runit
é um sucessor dedaemontools
(ambos estão escritos emc
)supervisord
usapython
.
Tenho usado runit
com socklog
o mesmo autor dentroAlpino Linux lxc
contêineres por cerca de 10 meses para gerenciar web
/ database
e vários outros serviços. É leve, fácil de gerenciar e não tive falhas de serviço. O daemon de registro também é executado como seu próprio usuário, root
o que não é legal.
voidlinuxusa runit
como init
sistema e também parasupervisão de serviço(pesquise na árvore de pacotes por run
arquivos para exemplos de runit
scripts).
Responder2
Se sua distribuição usa Upstart, vá em frente. Possui suporte muito básico para reinicialização de jobs, mas inclui limites que podem impedir o loop de reinicialização, conforme mencionado por @EEAA.
Se o seu sistema operacional usa outro programa init, não o altere. Na verdade, não posso ajudá-lo com as outras ferramentas que você mencionou, pois geralmente uso o Ubuntu, onde o Upstart ainda está presente (a partir do LTS mais recente), então tenho pouco a ver com elas. Mas não é uma tarefa difícil criar um script simples que seja executado a partir decronuma vez por minuto (ou mais frequentemente em um loop), que pode verificar se existe um PID e emitir reinicialização em caso de falha.