Eu preciso monitorar vários processos em execução no meu servidor web. Por alguma razão, o verniz atualmente falha uma vez por dia ou dois. Estou usando o monit para supostamente reiniciar o verniz automaticamente, mas não funciona. Aqui está a minha entrada monit.conf para o Varnish.
check process varnish with pidfile /var/run/varnish.pid
start program = "/etc/init.d/varnish start" with timeout 60 seconds
stop program = "/etc/init.d/varnish stop"
if failed host <my server ip> port 80 protocol http
and request "/blank.html" then restart
if 3 restarts within 5 cycles then timeout
group server
O arquivo de log mostra que, depois que o verniz para de ser executado, a tentativa de reinicialização ocorre depois. Então, eventualmente, o monit para de monitorar o verniz.
Alguém tem sugestões de como posso corrigir isso? Ou melhor ainda, você pode sugerir outras maneiras simples de monitorar e reiniciar automaticamente os processos travados? Obrigado!
Respostas:
Eu procuraria em daemontools ( http://cr.yp.to/daemontools.html ).
A supervisão foi criada exatamente para esse propósito - iniciar processos e observá-los, reiniciando-os imediatamente se eles terminarem.
Você ainda pode usar o monit se precisar fazer algo mais complicado do que uma verificação simples "ainda está em execução" e se o processo precisar ser reiniciado, faça-o através da supervisão.
fonte
Você também pode usar / etc / inittab para reiniciar processos mortos usando a ação respawn .
Consulte a seção inittab em http://aplawrence.com/Unixart/startup.html
fonte
Você pode usar scripts de manipulador de eventos com o Nagios se tiver esse recurso para reiniciar os serviços.
Se o verniz exigir permissão de root para iniciar (scripts init.d geralmente fazem), mude "/etc/init.d/varnish start" para "sudo /etc/init.d/varnish start". Mas isso provavelmente não será suficiente, já que você provavelmente não deseja dar o que o usuário monit executa como privilégios totais do sudo nopasswd a todos os comandos, e dar o sudo a um script de shell seria basicamente tão ruim quanto. Então, você precisará descobrir quais comandos nesse script init precisam do sudo, conceder esses comandos privilégios sudo no arquivo / etc / sudoers ao usuário monit e, finalmente, editar esse script init adequadamente. Ou talvez em vez de todo esse verniz possa ser executado como usuário não root?
Finalmente, tenho certeza que você sabe disso, mas vou dizer de qualquer maneira. Você está claramente se esforçando muito nisso, espero que você esteja se esforçando ao máximo para descobrir por que o verniz está falhando e realmente corrigi-lo (ou perseguir os desenvolvedores para descobrir o porquê) :-)
Atualização:
Isso pode não ser tão limpo, mas uma maneira fácil de fazer isso como root pode ser configurar um script que verifique se o processo está bom e se não o inicia. Em seguida, basta executar esse script a cada dois minutos como um trabalho cron.
fonte
Outro ótimo método extraído do StackOverflow :
Isso pode ser adicionado ao crontab:
Em seguida, adicione uma regra para iniciar o script do seu monitor:
Ou adicionado como um script em
/etc/init.d
Veja a resposta StackOverflow para uma explicação detalhada sobre por que essa é uma boa abordagem.
fonte
Eu também estava procurando a maneira mais simples de lidar com esse problema. A maneira mais fácil de encontrar é simplesmente adicionar
Restart=allways
ao.service
arquivo em questão a/etc/systemd/system/multi-user.target.wants/
última linha da[service]
tag.Depois disso, faça o
sudo systemctl daemon-reload
seguintesudo systemctl restart service.service
para recarregar as alterações.Você pode testar verificando se o serviço está sendo executado
systemctl status processname
:, verifique o registro de data e hora de início. Depois dissops -ef | grep servicename
, interrompa o processo com o ID recém-encontradokill 1234
. depois disso, façasystemctl status processname
novamente e verifique se o registro de data e hora de início é atualizado.Deve funcionar em:
fonte