Comecei a hospedar sites há algum tempo usando o Cherokee. Para fontes externas (FastCGI, etc), há uma opção para iniciar o processo se não encontrar uma em execução no soquete ou porta designada. Isso é ótimo porque significa que se o PHP ou um site Django cair (como ocasionalmente acontece), ele será reiniciado automaticamente.
Em um novo servidor usando PHP-FPM, eu não poderia usar o Cherokee (ele possui um bug no PHP), então mudei para o NGINX. Eu realmente gosto do NGINX (por seu estilo de configuração), mas estou tendo sérios problemas com processos em queda e nunca reaparecendo. O PHP faz isso algumas vezes, mas os sites Django são mais um problema. Eu criei scripts init para eles e eles aparecem na inicialização, mas isso não me ajuda se eles aparecerem entre as reinicializações.
Acho que estou procurando um proxy FastCGI. Algo que, como o Cherokee, sabe quais processos devem estar em execução em quais soquetes / portas e os repassa sob demanda. Será que tal coisa existe? Existe alguma maneira de criar isso no NGINX (para facilitar a configuração)?
/etc/init.d/apachectl
esse. Você geralmente precisa reescrever seu próprio script de inicialização simples para usarexec
. Embora eu gostaria de ver mais alguns exemplos usando daemontoolsreaparecer em inittab
fonte
Eu apóio a
daemontools
sugestão, mas se você não gosta do modo como o software da DJB funciona (por qualquer motivo), também existesupervisord
.Eu configurei uma imagem do FreeBSD há algum tempo que costumava
supervisord
gerenciarnginx
egunicorn
, que eu costumava hospedar alguns aplicativos WSGI simples, e todo o processo era bem direto.Se você está fazendo isso no Django, o Gunicorn torna realmente simples a implantação de aplicativos Django. Veja esta postagem no blog para mais detalhes.
fonte
Outra opção pode ser usar o monit , que é o que geralmente uso.
fonte
Você já considerou
god
?Eu o uso para garantir que, se as instâncias Rails / nginx caírem, elas sejam revividas e, embora eu não tenha suporte interno para verificar se está usando a porta correta ou não, mas se o problema é que o processo falha ou não está mais em execução, você não pode dar errado
god
.fonte
Além de daemontools e supervisord, há daemonize .
fonte
Uma solução hackish seria lançar periodicamente um script (via
cron
) que detecsse se o processo estivesse inoperante e, nesse caso, reiniciá-lo.fonte
Existem várias maneiras de reiniciar um daemon com falha. A recomendação usual é "reaparecer no inittab", mas com alguma consideração de um limite se a máquina estiver realmente parafusada.
O daemon watchdog também pode monitorar um processo através de seu arquivo PID. No entanto, isso deve ser considerado apenas como uma linha de defesa secundária para reiniciar uma máquina que está muito doente para funcionar corretamente (por exemplo, falta de memória, bombardeio de garfo, etc.), e não como uma maneira primária ou de monitorar e reiniciar um daemon.
Finalmente, você pode considerar o monitoramento de sistemas complexos usando o nagios para fornecer aos administradores uma visão global. Ele pode executar plug-ins para analisar a operação do daemon externamente, que é um teste mais completo de seu funcionamento que simplesmente o PID ativo.
fonte
Resposta simples - comece, escreva seu pid em algum lugar e cada vez que x (segundos, minutos, sua aposta) verifique se o processo está encerrado.
Resposta longa - todos os itens acima são bons métodos. Mas um pouco complicado.
Lembre-se também de que estar vivo e responder a solicitações são coisas diferentes.
fonte