Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- conectar() {
- date >> $LOCAL_LOG
- if ps aux | grep "wvdial $CONEXAO" | grep -v grep # mata wdial se ele existir/estiver travado sem conexão
- then
- echo "Matando processo wvdial" >> $LOCAL_LOG
- killall wvdial >> $LOCAL_LOG
- sleep 2
- fi
- if ps aux | grep "pppd" | grep -v grep # mato pppd caso esteja travado sem conexão
- then
- echo "Matando processo pppd" >> $LOCAL_LOG
- killall pppd 1>> $LOCAL_LOG 2>&1
- sleep 2
- fi
- echo "Conectando wvdial, aguarde..." >> $LOCAL_LOG
- wvdial $CONEXAO 1>> $LOCAL_LOG 2>&1 & #tenta conectar utilizando o discador wvdial
- sleep 25 # sleep para aguardar o wvdial conectar, acho que 25 é muito tempo, mas deixo assim pra garantir
- echo $CONT
- if [ $CONT -eq 3 ] && ping -c 2 www.google.com.br # se na 3a vez ele conseguir, zera o CONT, pois aí não entra no proximo if
- then
- echo "3a tentativa, conectado. Nao matar wvdial. Zerando contador" >> $LOCAL_LOG
- CONT=0
- fi
- if [ $CONT -eq 3 ] # só entra aqui se tentar conexao 3 vezes sem sucesso, aqui que vejo que o modem desmaiou :-)
- then
- echo "Iniciando pppd $TTY" >> $LOCAL_LOG
- PPP0=$(ifconfig ppp0 | wc -l) #verifica se a interface ppp0 está travada
- if [ $PPP0 -eq 0 ]
- then
- echo "ppp0 não existe" >> $LOCAL_LOG
- else
- echo "matando ppp0" >> $LOCAL_LOG
- ifconfig ppp0 down 1>> $LOCAL_LOG 2>&1
- sleep 1
- fi
- sleep 1
- echo "Matando avahi-daemon" >> $LOCAL_LOG
- killall -9 avahi-daemon 1>> $LOCAL_LOG 2>&1 #andei matando esse processo tmb, junto com o pppd, daí conectava
- sleep 2
- echo "usando porta:" $TTY >> $LOCAL_LOG
- if pppd /dev/$TTY #Aqui que tenta resolver meu problema de "modem não respondendo" fazendo isso funciona novamente.
- then
- echo "pppd tty iniciado com sucesso" >> $LOCAL_LOG
- else
- echo "erro ao iniciar pppd /dev/tty, reiniciar o sistema" >> $LOCAL_LOG
- fi
- sleep 3
- PPPD_FLAG=true
- CONT_PPPD=0
- while $PPPD_FLAG
- do
- PSAUX=$(ps aux | grep $TTY | grep -v grep | wc -l) #verifica se o pppd /dev/$TTY está em execução
- if [ $PSAUX -eq 1 ] # se for = 1 é prq o processo existe
- then
- echo "pppd $TTY em execucao, aguardando 3 segundos..." >> $LOCAL_LOG
- echo $CONT_PPPD >> $LOCAL_LOG
- CONT_PPPD=$(($CONT_PPPD + 1))
- sleep 3
- if [ $CONT_PPPD -eq 10 ] #se for = 10, o pppd /dev/$TTY já está rodando a uns 30 segundos, suficiente para tentar conexão novamente
- then
- echo "Assassinando pppd $TTY e ppp0 \../ 0.o \../" >> $LOCAL_LOG
- if [ $PPP0 -eq 0 ]
- then
- echo "ppp0 não existe" >> $LOCAL_LOG
- else
- echo "matando ppp0, morre miserento" >> $LOCAL_LOG
- ifconfig ppp0 down 1>> $LOCAL_LOG 2>&1 #se tiver travado mata o ppp0, pois ao executar o pppd /dev/$TTY ele cria uma interface ppp0 trmporaria
- sleep 1
- fi
- sleep 3
- killall -9 pppd 1>> $LOCAL_LOG 2>&1
- sleep 5
- # pppd /dev/$TTY
- PPPD_FLAG=false #vira false pra sair do while e tentar conectar
- CONT_PPPD=0
- CONT=0
- fi
- else # se o pppd /dev/$TTY for encerrado sozinho, não preciso matá-lo
- echo $TTY "Morto ou encerrado, zerando cont e pppd_flag=false" >> $LOCAL_LOG
- PPPD_FLAG=false #vira false pra sair do while e tentar conectar
- CONT=0
- fi
- done
- fi
- }
- #gera um log para ver o comportamento do discador
- gerar_log() {
- cp /etc/discador/discador.log /etc/discador/discador.log.tmp
- sed -i '1,100d' /etc/discador/discador.log.tmp
- cat /etc/discador/discador.log.tmp > /etc/discador/discador.log
- }
- sleep 18
- LOCAL_LOG="/etc/discador/discador.log"
- if ! [ -e $LOCAL_LOG ]
- then
- touch $LOCAL_LOG
- fi
- echo "**********I N I C I A N D O D I S C A D O R**********" >> $LOCAL_LOG
- CONT=0
- #qt_portas é o seguinte, esse discador roda em um tablet da panasonic, se eu ligo o pc com o ele ligado na energia, ele monta as portas de /dev/ttyUSB0 ate a ttyUSB3 ou ttyUSB1 ate a ttyUSB4, 4 portas. Se eu ligo ele e estiver usando bateria, ele monta ttyUSB0 ate a ttyUSB2 ou ttyUSB1 ate a ttyUSB3, 3 portas, então esse monte de if qt_portas e variaveis TTY serve para saber qual a porta que vou discar chamando como parametro no wvdial
- QT_PORTAS=$(ls /dev/ttyU* | wc -l)
- MAX_LOG=50000
- if [ $QT_PORTAS -eq 4 ] #se entrou aqui é prq tá ligado na energia, doidera dimais né?
- then
- while true
- do
- if ! ping -c 2 www.google.com.br || ! ping -c 2 www.terra.com.br
- then
- if [ -e /dev/ttyUSB3 ] && [ -e /dev/ttyUSB0 ] #se moutou /dev/ttyUSB0 ate USB3, a que disca é a USB2
- then
- TTY="ttyUSB2"
- echo "usando dev " $TTY
- CONEXAO="vivo" #nome da conexao, criada no wvdial.conf
- echo "desconectado, conectando..." >> $LOCAL_LOG
- conectar #função la em cima
- CONT=$(($CONT+1))
- echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
- elif [ -e /dev/ttyUSB4 ] #se moutou /dev/ttyUSB1 ate USB4, a que disca é USB3
- then
- TTY="ttyUSB3"
- echo "usando dev" $TTY
- CONEXAO="vivo2" #nome da conexao, criada no wvdial.conf
- echo "desconectado, conectando..." >> $LOCAL_LOG
- conectar #função la em cima
- CONT=$(($CONT+1))
- echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
- fi
- else
- date >> $LOCAL_LOG
- echo "Conectado... 60 segundos para a proxima verificacao" >> $LOCAL_LOG
- CONT=0
- sleep 60
- fi
- #se o log chegar ao tamanho maximo ele chama o gerar_log que apaga as 100 linhas mais antigas
- TAM_LOG=$(cat /etc/discador/discador.log | wc -l)
- if [ $TAM_LOG -gt $MAX_LOG ]
- then
- gerar_log # função la em cima
- fi
- done
- elif [ $QT_PORTAS -eq 3 ] #se entrou aqui é prq ligou o pc só na bateria
- then
- while true
- do
- if ! ping -c 2 www.google.com.br || ! ping -c 2 www.terra.com.br
- then
- sleep 25
- if [ -e /dev/ttyUSB2 ] && [ -e /dev/ttyUSB0 ] #disca na ttyUSB1
- then
- TTY="ttyUSB1"
- echo "usando " $TTY
- CONEXAO="vivo3" #nome da conexao, criada no wvdial.conf
- echo "desconectado, conectando..." >> $LOCAL_LOG
- conectar #função la em cima
- CONT=$(($CONT+1))
- echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
- elif [ -e /dev/ttyUSB3 ] #disca na ttyUSB2
- then
- TTY="ttyUSB2"
- echo "usando " $TTY
- CONEXAO="vivo" #nome da conexao, criada no wvdial.conf
- echo "desconectado, conectando..." >> $LOCAL_LOG
- conectar #função la em cima
- CONT=$(($CONT+1))
- echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
- fi
- else #se tiver conectado aguarda 1 min para proxima verificação
- date >> $LOCAL_LOG
- echo "Conectado... 60 segundos para a proxima verificacao" >> $LOCAL_LOG
- CONT=0
- sleep 60
- fi
- TAM_LOG=$(cat /etc/discador/discador.log | wc -l)
- if [ $TAM_LOG -gt $MAX_LOG ]
- then
- gerar_log
- fi
- done
- else #se der erro ao montar o modem, nem tenta discar, isso só por segurança, nunca entrou aqui
- echo "Portas ttyUSB não foram montadas corretamente, listando portas montadas" >> $LOCAL_LOG
- ls /dev/ttyU* >> $LOCAL_LOG
- fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement