Ajuda com Script para verificar rede de tempos em tempos

1. Ajuda com Script para verificar rede de tempos em tempos

marcus
sucram74

(usa Debian)

Enviado em 07/10/2014 - 09:18h

Bom dia.

Estou com um problema que a minha interface de rede no meu firewall cai umas 2 a 3 vezes por dia(rede interna)...ai a rede local fica lógicamente sem o gateway para sair para a internet.

Adaptei um script que encontrei que ficou desse jeito


#!/bin/bash

#--------------------------Par�metros do net-beep-------------------------
NET_BALANCE=3 # Numero minimo de confirmações
MSG="internet funcionando"
#-------------------------------------------------------------------------


TEST_NET() {
NET_STATE=$(ping -c 5 192.168.0.224 | grep -c time)
if [ $NET_STATE -ge $NET_BALANCE ]; then
/etc/init.d/networking restart
echo "deu pau" >> log_rede.txt
else
echo $MSG >> log_rede.txt
fi
}



e no Crontab eu coloquei para verificar de minuto em minuto

# m h dom mon dow command
*/1 * * * * /bin/bash /root/beep.sh
#

Acontece que não esta gerando o arquivo log_rede.txt que eu criei apenas para ver se o script esta rodando. Fiz um teste e rodei o script na mão e coloquei esse ip de final 224 pois sei que ele não existe...e o arquivo log_rede.txt não aparece nada.

O que pode estar errado? Preciso que de minuto em minuto o script seja rodado...mas pelo visto ele esta com algum pau

Obrigado





  


2. Re: Ajuda com Script para verificar rede de tempos em tempos

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 07/10/2014 - 09:32h

Dá uma olhada aqui neste artigo que escrevi recentemente para o VOL http://www.vivaolinux.com.br/artigo/Montando-Servidor-de-Internet-com-Ubuntu-Server/

Lá tem um script de failover com dois links que fiz para testar. Quando um link está off o outro assume. Espero que ajude.


3. Re: Ajuda com Script para verificar rede de tempos em tempos

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/10/2014 - 09:41h

Tente colocar aspas na linha que gera log

Tipo assim


echo "$a" >> teste.txt


Espero ter ajudado

T+


4. Re: Ajuda com Script para verificar rede de tempos em tempos

marcus
sucram74

(usa Debian)

Enviado em 07/10/2014 - 09:48h

k666 escreveu:

Dá uma olhada aqui neste artigo que escrevi recentemente para o VOL http://www.vivaolinux.com.br/artigo/Montando-Servidor-de-Internet-com-Ubuntu-Server/

Lá tem um script de failover com dois links que fiz para testar. Quando um link está off o outro assume. Espero que ajude.


Fiz essa alteração no seu script e seguinte erro: rout2:~# ./testarede.sh
./testarede.sh: line 5: dig: command not found
^C

Estou usando o Debian...acho que não encontrou o comando dig


#!/bin/bash
LOG=/root/log_rede.log

failover ()
{
while [ 1 ]
do
for i in `dig +short 192.168.0.224`
do

# Verificando a comunica��o do link de internet

/bin/ping -c 1 $i
done

# Caso o resultado do comando anterior seja 0 (zero), o link
# de internet principal est� ok. Se for 1 (um) houve falha no comando
# deduzindo assim aus�ncia de conex�o. Quem vai determinar isso � o
# comando echo $?. Mais abaixo, haver� um if para testar as condi��es

STATUS_CMD_LINK=`echo $?`

if [ $STATUS_CMD_LINK -eq 0 ]; then

# Caso haja sucesso no teste do comando do ping
# as regras para o compartilhamento de internet ser�o inseridas

echo "# LINK FUNCIONANDO: `date +%d/%m/%y-%H:%M:%S`">> $LOG
else

echo "_________________________" >> $LOG
echo " " >> $LOG
echo "# LINK DEU PAU.: `date +%d/%m/%y-%H:%M:%S`">> $LOG
echo " " >> $LOG
echo "_________________________" >> $LOG

fi

# A cada 2 minutos (120 segundos) ser� feito um teste no link
# principal para constar se o mesmo encontra-se no ar.

sleep 60



5. Re: Ajuda com Script para verificar rede de tempos em tempos

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/10/2014 - 10:03h

Amigo , acho que consegui


#!/bin/bash

# Poderia colocar um while true e um sleep de 60 segundos e colocar p/ iniciar pelo .bashrc se nao me engano

#--------------------------Parimetros do net-beep-------------------------
MSG="Internet Funcionando"
#-------------------------------------------------------------------------


TEST_NET() {
NET_STATE=`(ping -c 5 192.168.0.224 | grep -c time)`
if [ $NET_STATE -ne 0 ]; then
sudo /etc/init.d/networking restart
echo "$(date +%d/%m/%y-%H:%M:%S) Erro !" >> log_rede.txt
else
echo "$(date +%d/%m/%y-%H:%M:%S) $MSG" >> log_rede.txt
fi
}

TEST_NET # Chama a função




Aqui funcionou legal

Espero ter ajudado

T+


6. Re: Ajuda com Script para verificar rede de tempos em tempos

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 07/10/2014 - 10:24h

O comando dig é apenas para resolver nomes. Não teria muito utilidade para a sua situação. Você quer apenas saber se o seu servidor está ou não com conexão? Se for esse o caso, tem um jeito mais fácil de fazer. Veja abaixo como adequei o link a sua realidade. Preste atenção aos comentários.


#!/bin/bash

# Atenção, antes de rodar o script, crie o arquivo abaixo
# Pode ser no diretório a sua escolha

LOG=/root/linkoff.log

#------------------------------#
# INÍCIO DA FUNÇÃO DE FAILOVER #
#------------------------------#

# Aqui optei em por uma função para deixar a estrutura do
# script mais organizada e legível. É de suma importância
# que você esteja familiarizado com o shell script

failover ()
{

# Criação de um loop infinito para testar a disponibilidade
# dos links de internet

while [ 1 ]
do

# Neste for, o comando dig retornará os dois IPs relacionados
# ao site do UOL. Você poderia por qualquer site aí, porém o UOL
# retorna dois IPs que serão utilizados pelo script para saber
# se o link de internet principal está fora

for i in `dig +short uol.com.br`
do

# Verificando a comunicação do link de internet

/bin/ping -c 1 $i
done

# Caso o resultado do comando anterior seja 0 (zero), o link
# de internet principal está ok. Se for 1 (um) houve falha no comando
# deduzindo assim ausência de conexão. Quem vai determinar isso é o
# comando echo $?. Mais abaixo, haverá um if para testar as condições

STATUS_CMD_LINK=`echo $?`

if [ $STATUS_CMD_LINK -eq 0 ]; then

echo "O LINK ESTÁ ATIVO"
else

# Se o link falhar, os comandos mais abaixo farão a limpeza
# das regras de iptables e irão configurar o segundo link de internet
# e será criado um arquivo de log informando quando houve a queda

echo "_________________________" >> $LOG
echo " " >> $LOG
echo "# LINK DE INTERNET DOWN.: `date +%d/%m/%y-%H:%M:%S`">> $LOG
echo " " >> $LOG
echo "_________________________" >> $LOG


fi

# A cada 2 minutos (120 segundos) será feito um teste no link
# principal para constar se o mesmo encontra-se no ar.

sleep 120

done
}

####### CHAMA A FUNÇÃO ########

failover



Qualquer dúvida é só avisar.


7. Re: Ajuda com Script para verificar rede de tempos em tempos

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/10/2014 - 11:01h

Amigo , k666 , não querendo tirar sua sabedoria , mas seu codigo sempre vai dizer que está conectado , pq o echo $? ele lê o ultimo comando , e no caso , é o for , e ele sempre termina com '0'.

Corrigi o seu codigo e está funcionando ,mas nao sei se é assim que quer.


#!/bin/bash

LOG=log_rede.txt

failover(){

while [ 1 ];do
/bin/ping -c 1 www.google.com > /dev/null
if [ $? -eq 0 ]; then
echo "O LINK ESTÁ ATIVO"
else
echo " ____________________________________________________" >> $LOG
echo "| |" >> $LOG
echo "| |" >> $LOG
echo "| # LINK DE INTERNET DOWN.: `date +%d/%m/%y-%H:%M:%S` |" >> $LOG
echo "| |" >> $LOG
echo "|___________________________________________________|" >> $LOG
fi
sleep 120
done
}

failover


[]'s
T+


8. Re: Ajuda com Script para verificar rede de tempos em tempos

Wagner Souza
wagnerfs

(usa Fedora)

Enviado em 07/10/2014 - 11:45h

Thihup, de fato você tem razão e estamos aqui para aprender um com o outro. Agradeço a observação e explico o ocorrido. Dei um copiar/colar no script do meu artigo, porém, o que está no meu artigo está com informações a mais que faz com que seja apresentado erro na hora da resolução do nome com o comando dig trocando um link pelo outro o que não é o caso do nosso amigo aqui no tópico.

Só uma observação, acredito não ser necessáiro essa linha PING=$(/bin/ping -c 1 www.google.com), visto que mais embaixo você já executa o comando ping.

Não cheguei a testar o seu código, mas acredito que vai satisfazer a necessidade do nosso amigo que abriu o tópico.

Forte abraço.


9. Re: Ajuda com Script para verificar rede de tempos em tempos

Thiago Henrique Hüpner
Thihup

(usa Manjaro Linux)

Enviado em 07/10/2014 - 12:16h

k666 escreveu:

...

Só uma observação, acredito não ser necessáiro essa linha PING=$(/bin/ping -c 1 www.google.com), visto que mais embaixo você já executa o comando ping.

...




Amigo , eu tinha testado com aquela linha, mas vi que nao tinha dado certo, dai coloquei o comando , mas na pressa eu acabei esquecendo de tirar a linha,mas agora está tudo certo.

Valeu a força

[]'s



10. Re: Ajuda com Script para verificar rede de tempos em tempos

marcus
sucram74

(usa Debian)

Enviado em 07/10/2014 - 14:19h

Agradeço a ajuda de todos.

Acredito que agora esta funcionando...só não esta gerando os logs...não sei pq...mas quando o ping para a rede interna deixa de funcionar...ele reinicia a placa que era o que eu precisava....só preciso tentar descobrir porque não esta gerando os logs. Eu coloquei ele no rc.local para reiniciar com o boot e funcionou normal.

Dei um tail - f /root/log_rede.log e ele esta vazio sem atualização nenhuma. Quando o servidor bootou ele foi até o carregamento do MTA e não me disponibilizou o shell ou seja...começou a rodar o failover e fica nisso...mas abri um outro shell por ssh e o servidor esta normal...só no console direto no servidor que ele esta como se congelado.

O script ficou assim: Esse servidor que eu ping...o 0.2 é um servidor de produção interna...por isso que eu pingo ele pois é um servidor 24x7...ou seja...se o firewall não pingar ele eu sei que a interface do firewall caiu.


#!/bin/bash

LOG= log_rede.log

failover(){

while [ 1 ];do
/bin/ping -c 1 192.168.0.2 > /dev/null
if [ $? -eq 0 ]; then
echo "O LINK ESTA ATIVO.: `date +%d/%m/%y-%H:%M:%S` " >> $LOG
else
echo " ____________________________________________________" >> $LOG
echo "| |" >> $LOG
echo "| |" >> $LOG
echo "| # LINK DE INTERNET DOWN.: `date +%d/%m/%y-%H:%M:%S` |" >> $LOG
echo "| |" >> $LOG
echo "|___________________________________________________|" >> $LOG
/etc/init.d/networking restart
fi
sleep 60
done
}

failover








Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts