web-development-kb-pt.site

Garantir que um processo esteja sempre em execução

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 site PHP ou Django cair (como ocasionalmente ocorre), 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 os processos em queda e nunca reaparecendo. PHP faz isso algumas vezes, mas Django sites 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 incorporar isso ao NGINX (para facilitar a configuração)?

24
Oli

Que tal daemontools e especificamente a ferramenta de supervisão

supervisionar monitora um serviço. Inicia o serviço e reinicia o serviço se ele morrer. A configuração de um novo serviço é fácil: todas as necessidades de supervisão são um diretório com um script de execução que executa o serviço.

14
Murilo

renascer em inittab

8
Stephen Jazdzewski

Eu apóio a sugestão daemontools, mas se você não gosta da maneira como o software da DJB funciona (por qualquer motivo), também há supervisord .

Configurei uma imagem do FreeBSD há algum tempo que usava supervisord para gerenciar nginx e gunicorn , que eu costumava hospedar alguns aplicativos WSGI simples, e todo o processo foi bem direto.

Se você está fazendo isso no Django, o Gunicorn torna muito fácil implantar Django, btw. Consulte esta postagem no blog para obter mais detalhes.

5
Hank Gay

Outra opção poderia ser usar monit , que é a que geralmente uso.

4
lenin

Você considerou god ?

Deus é uma estrutura de monitoramento fácil de configurar, fácil de estender, escrita em Ruby.

Manter os processos e tarefas do servidor em execução deve ser uma parte simples do processo de implantação. Deus pretende ser o aplicativo de monitoramento mais simples e poderoso disponível.

Eu o uso para garantir que, se as instâncias do 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 com god.

2
Chris Bunch

Uma solução hackish seria lançar periodicamente um script (via cron) que detecta se o processo está inoperante e, nesse caso, o reinicia.

0
Robert Swisher

Além de daemontools e supervisord, há daemonize .

0
Brian Clapper

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 ser executada 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.

0
Paul Crawford