Como monitorar um serviço e reiniciar se estiver parado no Linux

Como monitorar um serviço e reiniciar se estiver parado no Linux

Na verdade, não tenho certeza se devo usar Shell Scripts ou se já existem algumas maneiras. Mas seja qual for a abordagem que usarmos, gostaria de manter um serviço em execução o tempo todo.

Digamos apache2como exemplo. Então ..

  • Em qualquer momentoo apache2serviço está parado ou não está funcionando, quero que ele seja iniciado (ou reiniciado) .. automaticamente.
  • Em palavras mais simples, quero manter umServiçoinstalado e funcionando o tempo todo.

(Talvez eu possa dar uma frequência justa para verificar, sefazendo verificação em tempo realé o problema. Então, digamos, a cada 5 minutos)

A única maneira que consegui pensar é usar Shell Scripts com Cron Tab.

  • Existe alguma solução inteligente, por favor?

Obrigado!

Responder1

Atualização de março de 2018

Esta resposta agora é bastante antiga e, desde que foi escrita, o systemd venceu a guerra pid1 no Linux. Portanto, você provavelmente deve criar umsistemaunidade, se o systemd estiver integrado à sua distribuição (que é a maioria deles).

A resposta abaixo foi preservada para a posteridade.


A resposta monit acima é válida, mas pensei em mencionar algumas alternativas:

Vale lembrar que seu sistema operacional já resolveu o problema de gerenciamento de processos. Tradicionalmente, o Linux usa o sysvinit, que é basicamente a coleção de scripts que você vê em init.d. No entanto, é muito burro e não pode monitorar processos, os scripts init.d são complicados e estão sendo substituídos por um bom motivo.

Sistemas operacionais mais modernos estão começando a substituir o sysvinit, e os pioneiros são Upstart e Systemd. O Debian está inclinado para o systemd, o Ubuntu foi desenvolvido e já fez a transição para o Upstart e, como o Debian, Redhat/CentOS/Fedora estão migrando para o systemd. Portanto, se você usar um sistema operacional que já substituiu o sysvinit, eu recomendaria usar o que está integrado. Os scripts são muito mais fáceis de escrever do que os scripts de inicialização.

Eu usei o runit e gostei bastante, mas o mais fácil de usar é o supervisor. Também está muito bem documentado, funciona em praticamente qualquer lugar e está incluído em todas as principais distribuições.

Mas faça o que fizer, por favor, POR FAVOR, não use um script de shell. Há tantas coisas erradas nessa abordagem!

Responder2

iptablesé um mau exemplo, pois não é realmente um serviço ou daemon em execução, mas parte do kernel. Você realmente não pode "parar" iptables, você só pode fornecer uma configuração e "parar" envolve fornecer uma configuração em branco. Na verdade, tive uma falha nos sistemas Linux, mas a configuração de encaminhamento de porta iptablescontinua funcionando.

De qualquer forma, um utilitário chamadomonitfará o que você quiser. Se você estiver usando o Debian, está apt-get install monitlonge. É um pouco complicado de aprender, mas muito flexível.

Responder3

Estamos usando este script simples para fazer um alerta e iniciar o serviço caso ele não esteja em execução. Você também pode adicionar mais serviços.

 file name: uptime.sh

 #!/bin/bash
 #service monitoring
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^80$ > /dev/null   2>/dev/null
 a=$(echo $?)
 if test $a -ne 0
 then
 echo "http service down" | mail -s "HTTP Service DOWN and restarted now" root@localhost
 /etc/init.d/httpd start > /dev/null 2>/dev/null
 else
 sleep 0
 fi
 /bin/netstat -tulpn | awk '{print $4}' | awk -F: '{print $4}' | grep ^53$ > /dev/null   2>/dev/null
 b=$(echo $?)
 if test $b -ne 0
 then
 echo "named service down" | mail -s "DNS Service DOWN and restarted now" root@localhost
 /etc/init.d/named start > /dev/null 2>/dev/null
 else
 sleep 0
 fi

 Cron setup:
 */5 * * * * /root/uptime.sh > /dev/null 2>/dev/null

Responder4

Para aumentar a longa lista de supervisão init/svc, como subdiretório do S6, há um novo garoto no bairro, 66, que lida com o gerenciamento e registro de serviços do s6 de maneira rápida, leve e fácil de usar. Este é o link para a documentação oficial do Obarun-Linuxhttps://web.obarun.org/software

Este é um FAQ sobre como usar este software 66 e entender o s6http://sysdfree.wordpress.com/266

Desde sua versão estável, apenas um bug foi encontrado relacionado às mudanças do kernel 4.20-->5.0, todos os outros problemas relatados tinham a ver com pessoas aprendendo algo novo. Se o gerenciamento de serviços tivesse que se tornar mais simples do que isso, talvez fosse melhor mudar para o ms-windows (Linus me livre). Para ver na vida real como isso pode funcionar basta baixar um Obarun live.iso e brincar com ele. Instalar serviços e seus 66 scripts habilitá-los, eliminá-los, ver seus logs, interrompê-los e iniciá-los (enquanto habilitado), agrupar serviços em uma árvore e fazer com que árvores de serviço iniciem e parem todas juntas, tenha serviços de nível de usuário separadamente do sistema. Ele faz o que o s6 faz bem e torna mais simples para o usuário explorar o sistema à prova de balas do s6.

Os downloads de imagens podem ser encontrados aqui:https://web.obarun.org/index.php?id=74 arquivos de verificação md5https://repo.obarun.org/iso/

Além do init e do gerenciamento de serviços, o s6/66 não possui nenhuma dependência de mais nada no sistema. É uma camada do sistema básico que deixa o restante do software funcionar por conta própria, init/svc-mgmt cego. Todos os s6 e 66 são escritos em C e não são específicos do Linux ou da glibc. Os servidores do Skarnet (autores s6) estão funcionando há quase uma década sem muitas pausas no sistema musl personalizado. Alpine, Void e Adelie atualmente também possuem software s6 em seus repositórios. Adelie o usa para supervisão de serviço por padrão. Void agora carrega 66 também. Não sei se e até que ponto alguém portou o s6 para o xxBSD ou outros sistemas xxIX.

informação relacionada