De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Verificar o funcionamento de servidores

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 28 de fevereiro de 2018

Para verificar se todos os servidores sob a sua supervisão estão funcionando corretamente, podemos montar um pequeno script que, a partir de uma lista de máquinas, realize um teste de tempos em tempos:

Antes de escrever o script, precisamos conhecer os códigos gerados pelo comando ping em cada situação que encontrar:

Status Código
Sucesso 0
Sem resposta 1
Outros erros 2

Se o código for zero, está tudo bem, não precisamos nos preocupar, se for diferente de zero (1 ou 2), o administrador deverá ser alertado.

O nosso script deverá então verificar estes códigos. Mas como fazer isso? O comando if do Shell é bem mais poderoso que os seus congêneres de outras linguagens, que testam somente condições (e somente 7 condições, verifique). Aqui esta instrução testa se um comando, no caso o ping, foi bem sucedido (código de retorno zero), quando executará o bloco do then. Caso contrário (código de retorno diferente de zero) o bloco do else será executado.

Os códigos de retorno que citamos são apresentados pela variável $? e existem, com valores diferentes, para todos os comandos, mas, por convenção, sempre que um código de retorno ($?) é zero, significa que o comando correspondente foi bem sucedido.

Só para despreocupar vocês, já adianto que o Shell tem uma instrução específica para testar condições, que é o test, que testa mais de 30 condições distintas, inclusive em nível de arquivos.

Vamos então ao script:

$ cat check_server.sh
#!/bin/bash

# check_server.sh v1.0

while read servidor
do
  echo "Testando $servidor"
  if ping -q -c5 $servidor
  then
        echo $servidor OK
  else
        echo $servidor não está respondendo
/usr/lib/sendmail queiroz@dicas-l.com.br << EOF
Subject: **URGENTE**: Servidor $servidor não está respondendo
From: System Admin <admin@dicas-l.com.br>

O servidor $servidor não está respondendo. Por favor, verifique o que
está ocorrendo o mais rápido possível.

Atenciosamente,

System Administrator
EOF
  fi
done < lista_de_servidores.txt

Note que neste script inserimos uma estrutura de controle de laço (while) e uma estrutura de controle de decisão (if). O laço while faz a leitura de todas as linhas do arquivo lista_de_servidores.txt e envia um ping para cada um dos servidores contidos na lista. Já o if testa a execução do comando ping caso ele tenha sido bem sucedido e, de acordo com a resposta que obtiver, toma as providências necessárias para cada situação.

No comando ping eu pedi que fossem enviados cinco pacotes para o servidor sendo testado. Se eu enviasse apenas um pacote, eu poderia criar um alarme falso, pois apenas um pacote de teste é muito pouco. Eu indiquei também que quero que o comando ping se comporte de maneira mais silenciosa (diretiva -q).

O segredo reside no if testando o retorno do ping, o que me indica se o comando foi bem sucedido ou não. Caso ele tenha se dado mal, quando seu código de retorno ($?) for diferente de zero, o bloco de comandos do else será executado e o administrador do sistema deve ser alertado para tomar as devidas providências. Neste caso, além da mensagem de erro ecoada para a tela, é enviada uma mensagem para o administrador da máquina. O arquivo lista_de_servidores.txt contém a relação de todos os servidores a serem testados.

Importante, veja que na mensagem enviada ao administrador foi incluída a variável $servidor, obtida a partir da leitura do arquivo lista_de_servidores.txt. As mensagens configuradas a partir dos Here Documents podem ser configuradas de maneira bastante completa, inserindo substituição de variáveis e resultados de comandos, como já vimos.

Finalizando, existem aplicativos que desempenham esta função com muito mais recursos, o objetivo aqui foi mais uma vez demonstrar a flexibilidade e facilidade com que shell scripts podem ser criados para atender as mais diversas finalidades.

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Rubens Queiroz de Almeida