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.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários