Watchdog para Linux

A receita abaixo é uma receita à moda Linux para fazer um watchdog para o ScadaBR no Linux.

O Watchdog para quem não sabe, é uma ferramenta que verifica se o ScadaBR esta rodando a tempos regulares, caso o tomcat trave ou caia por algum motivo, este por sua vez vai reiniciar o tomcat.

Ao contrário de usar o Java fazer o watchdog, vamos usar um script linux para tal tarefa, pois são coisas comuns para administradores Linux, são versáteis, úteis e nunca falham. Pois bem, a receita!

vá na pasta onde o tomcat esta instalado e procure a pasta webapps/ROOT.
Nesta crie um arquivo tavivo.html e dentro dele coloque a palavra SIM

Nosso script vai rodar e baixar do tomcat o arquivo tavivo.html e ler seu conteúdo, caso não seja a palavra sim, significa que o tomcat não esta ativo, ai ele reinicia o tomcat.

antes do script é necessário ter o programa wget. o wget costuma vir em diversas distribuições, ele serve para baixar coisas da internet. Caso não tenha o wget, é simples de instalar:

no debian/ubuntu e derivados (Raspbian tb) use o comando apt para instalar.

$ sudo apt-get install wget

vamos ao script:

O script pode ser criado na pasta /root, pois é necessário poderes do root para caso precise reiniciar o tomcat.

#!/bin/sh
HOST=127.0.0.1
PORT=8080


#infinite loop
while [ 1 ]
do
        #tentando acessar a página do tomcat
        RES=`wget -O - -o /dev/null --proxy=off http://${HOST}:${PORT}/tavivo.html | awk '{ print $1 }'`
        echo got ${RES}
        #decide na resposta colocada na variável RES
        if [ "$RES" = "SIM" ]
        then
                echo tomcat esta respondendo em: $HOST:$PORT
                echo "INFO:" `date +"%Y-%m-%d %H:%M:%S"`"(watchdog) - Tomcat ta ativo!" >>/var/lib/tomcat8/logs/mango.log
                # envia "O servidor Tomcat esta ativo"
        else
                echo "ALERTA: O servidor tomcat não esta ativo:"
                echo "ERRO:" `date +"%Y-%m-%d %H:%M:%S"`"(watchdog) - Tomcat NAO ESTA RODANDO! Reiniciando!" >>/var/lib/tomcat8/logs/mango.log
                
                echo Finalizando processo tomcat ...
                for thepin in `ps -Af | grep -v grep | grep tomcat | grep catalina | awk '{ print $2 }'`
                do
                        kill -9 ${thepin}
                done
                echo Iniciando ...
                service tomcat8 restart
                echo " INFO: Tomcat8 reiniciando"
                echo "WARN" `date +"%Y-%m-%d %H:%M:%S"`"(watchdog) - Tomcat8 Reiniciado" >>/var/lib/tomcat8/logs/mango.log

        fi
echo aguardando 10 min para verificar novamente se o tomcat ainda esta de pé
sleep 600
done

agora é só colocar o script para rodar com

./watchdog.sh&

Para admins linux: Você pode usar o cron para agendar o watchdog, não esqueça de mudar o script para não ficar num loop infinito.

o Script basicamente usa o wget para baixar a página tavivo.html que colocamos no tomcat, o conteúdo baixado fica na variável RES. Esta variável é comparada com o conteúdo SIM que esta no arquivo. Se a resposta for diferente de SIM, se o arquivo não for encontrado ele vai saber que o tomcat não responde, então reinicia o tomcat.

Depois disso, aguarda 10 minutos e o processo se repete até o script ser encerrado.