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.
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.
Error: No site found with the domain 's2.dicas-l.com.br' (Learn more)