Como escolhi entre inicial, runit, supervisor, daemontools e etc. para reiniciar um processo se ele morrer?

13

Eu tenho um proxy da web Nginx, um servidor da web gunicorn e um aplicativo da web python / balão. O processo Gunicorn aparentemente morreu, e eu quero melhorar isso no futuro, procurando em um utilitário que possa monitorar e reiniciar o processo Gunicorn no caso de ele travar novamente.

Eu encontrei vários que podem fazer o trabalho:

  • subir na vida
  • executá-lo
  • Supervisor
  • Daemon Tools
  • muito mais

Existe um artigo abrangente que compara e contrasta os vários utilitários usados ​​para monitorar e reiniciar um processo?

Matthew Moisen
fonte
2
Você realmente deve monitorar esses serviços de fora da caixa, pois surgirão situações em que você entra em um loop de reinicialização e consome todos os recursos disponíveis em seu servidor.
EEAA
Escreva seu próprio código para fazer exatamente da maneira que desejar. É uma tarefa fácil.
Ryan Babchishin

Respostas:

3
  • runité um sucessor de daemontools(ambos estão escritos em c)

  • supervisordusos python.

Eu tenho usado runitcom socklogpelo mesmo autor dentro Alpine Linux lxc recipientes para cerca de 10 meses para gerenciar web/ database& vários outros serviços. É leve, fácil de gerenciar e não tive falhas no serviço. O daemon de log também é executado como seu próprio usuário e não o rootque é bom.

O voidlinux usa runitcomo initsistema e também para supervisão de serviço (pesquise na árvore de pacotes runarquivos para exemplos de runitscripts).

Stuart Cardall
fonte
2

Se a sua distribuição usar o Upstart, vá com ela. Ele possui suporte muito básico para a reinicialização do trabalho, mas inclui limites que podem impedir o loop de reinicialização, conforme mencionado pelo @EEAA.

Se o seu sistema operacional usa outro programa init, não o altere. Eu realmente não posso ajudá-lo com as outras ferramentas que você mencionou, como 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 do cron uma vez por minuto (ou mais frequentemente em um loop), que pode verificar se existe um PID e emitir uma reinicialização em caso de falha.

sam_pan_mariusz
fonte