Script de redundância de links

30 30America/Sao_Paulo junho 30America/Sao_Paulo 2011

Esse script tem como finalidade a redundância entre 2 links de internet, priorizando 1. No meu caso, tenho net de 10mb e speedy de 1mb que é somente para urgências. Assim Se net cair, speedy assume. Se speedy estiver up e net voltar a ter sinal, ele chaveia novamente para a net, assim como se speedy estiver off, ele fica chaveando entre as 2 até encontrar sinal. Esse script está sob o comando do CRON, que o executa a cada minuto.

*/1 * * * * root /services/startup/redundancia2.sh > /services/startup/log/redundancia.log 2>&1

#!/bin/bash                                                                                                        by Vinicius Lorena ak mtphys && ack
#########################################################################
# VARIAVEIS
#########################################################################
ARQUIVO=”../arquivo.txt”   #Arquivo que armazerá valores 0,1, representando os links.
LER_VALOR=”$(/bin/cat $DIR)”  #Leitura do valor armazenado em arquivo.txt
PING=”/bin/ping”
PING=”$PING -c 1″
GW_NET=”187.107.148.1″
GW_SPEEDY=”192.168.1.1″
GW_MODEM=”200.100.11.73″
ROUTE=”/sbin/route”
TESTE1=$($PING $GW_NET | grep packets | cut -d ‘ ‘ -f 4)  #Testa se NET está off
TESTE2=$($PING $GW_MODEM | grep packets | cut -d ‘ ‘ -f 4) #Testa se Speedy está off
#########################################################################
# MAIN
#########################################################################

RESULT=$TESTE1
RESULT2=$TESTE2
if [ $RESULT -eq 0 ] && [ $LER_VALOR -eq 0 ]
then
echo “Servidor fora, realizando 3 tentativas..”
echo “Tentativa 1″
RESULT=$TESTE1
if [ $RESULT -eq 0 ];then
echo “Tentativa 2″
RESULT=$TESTE1
if [ $RESULT -eq 0 ];then
echo “Tentativa 3″
RESULT=$TESTE1
if [ $RESULT -eq 0 ];then
sleep 3
echo “1″ > $ARQUIVO
$ROUTE del default
$ROUTE add default gw $GW_SPEEDY
echo “10.0.0.1″ > /etc/resolv.conf
echo “8.8.8.8″ >> /etc/resolv.conf
/services/startup/firewall2.sh
fi

fi
fi

elif [ $RESULT2 -eq 0 ] && [ $LER_VALOR -eq 1 ];then
echo “Servidor fora, realizando 3 tentativas..”
echo “Tentativa 1″
RESULT2=$TESTE2
if [ $RESULT2 -eq 0 ];then
echo “Tentativa 2″
RESULT2=$TESTE2
if [ $RESULT2 -eq 0 ];then
echo “Tentativa 3″
RESULT2=$TESTE2
if [ $RESULT2 -eq 0 ];then
sleep 3
echo “Voltando para o link da NET VIRTUA”
echo “0″ > $ARQUIVO
$ROUTE del default
$ROUTE add default gw $GW_NET
echo “10.0.0.1″ > /etc/resolv.conf
echo “8.8.8.8″ >> /etc/resolv.conf
/services/startup/firewall.sh

fi
fi
fi

elif [ $RESULT -eq 1 ] && [ $LER_VALOR -eq 1 ];then
sleep 3
echo “Voltando para o link da NET VIRTUA”
echo “0″ > $ARQUIVO
$ROUTE del default
$ROUTE add default gw $GW_NET
echo “10.0.0.1″ > /etc/resolv.conf
echo “8.8.8.8″ >> /etc/resolv.conf
/services/startup/firewall.sh


Cut

29 29America/Sao_Paulo maio 29America/Sao_Paulo 2011

Iniciarei este blog exemplificando um comando/programa incluso em todas as distros linux. Simples e pratico, util para scripts e diversos.

Eis o Cut, interpretado pelo bash, sua funcao é dividir a entrada de dados seja ela byte (-b), caracter (-c) ou secao/secoes delimitada por caracteres (-d e -f), vindas de um arquivo, variavel ou string comum. Abaixo exemplos:

Retorna os 5 primeiros caracteres vindos de uma string

[metaphys@psychedelic ~]$ echo ‘Testando o Cut’ | cut -c1-5
Testa

Retorna o quinto caracter

[metaphys@psychedelic ~]$ echo ‘Testando o Cut’ | cut -c5
a

Como a locale do meu SO é o inglês, então, no exemplo abaixo, setei LC_ALL ( variavel de ambiente que tem precedencia sobre todas as outras LC_* ) para pt_BR. Com a saida do date, retornarei as secoes Mes, Dia e Ano.

[metaphys@psychedelic ~]$ echo `LC_ALL=pt_BR LANG= date | cut -d” ” -f2,3,6`
Mai 28 2011

No exemplo abaixo a entrada dos dados será a partir de um arquivo.

Inseri a string Testanto;o;Cut no arquivo teste.txt

[metaphys@psychedelic ~]$ echo ‘Testando;o;Cut’ > teste.txt
[metaphys@psychedelic ~]$ cat teste.txt
Testando;o;Cut

Leio o conteudo do arquivo teste.txt, executo o cut, declaro o delimitador “;”, retorno  o 3 bloco e insiro no arquivo saida.txt e por fim, vejo o conteudo do arquivo saida.txt

[metaphys@psychedelic ~]$ cat teste.txt | cut -d\; -f3 > saida.txt | cat saida.txt
Cut

No exemplo abaixo uso o parametro -b que representa bytes. No exemplo abaixo listo os 5 primeiros bytes do arquivo.

[metaphys@psychedelic ~]$ cat teste.txt | cut -b1-5
Testa

Mais informacoes:

man cut


Seguir

Obtenha todo post novo entregue na sua caixa de entrada.