Advertisement
Guest User

discador3g

a guest
Apr 25th, 2012
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.05 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. conectar() {
  4.     date >> $LOCAL_LOG
  5.     if ps aux | grep "wvdial $CONEXAO" | grep -v grep # mata wdial se ele existir/estiver travado sem conexão
  6.     then
  7.         echo "Matando processo wvdial" >> $LOCAL_LOG
  8.         killall wvdial >> $LOCAL_LOG
  9.         sleep 2
  10.     fi
  11.     if ps aux | grep "pppd" | grep -v grep # mato pppd caso esteja travado sem conexão
  12.     then
  13.         echo "Matando processo pppd" >> $LOCAL_LOG
  14.         killall pppd 1>> $LOCAL_LOG 2>&1
  15.         sleep 2
  16.     fi
  17.     echo "Conectando wvdial, aguarde..." >> $LOCAL_LOG
  18.     wvdial $CONEXAO 1>> $LOCAL_LOG 2>&1 & #tenta conectar utilizando o discador wvdial
  19.     sleep 25 # sleep para aguardar o wvdial conectar, acho que 25 é muito tempo, mas deixo assim pra garantir
  20.     echo $CONT
  21.     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
  22.     then
  23.         echo "3a tentativa, conectado. Nao matar wvdial. Zerando contador" >> $LOCAL_LOG
  24.         CONT=0
  25.     fi
  26.     if [ $CONT -eq 3 ] # só entra aqui se tentar conexao 3 vezes sem sucesso, aqui que vejo que o modem desmaiou :-)
  27.     then
  28.         echo "Iniciando pppd $TTY" >> $LOCAL_LOG
  29.         PPP0=$(ifconfig ppp0 | wc -l) #verifica se a interface ppp0 está travada
  30.         if [ $PPP0 -eq 0 ]
  31.         then
  32.             echo "ppp0 não existe" >> $LOCAL_LOG
  33.         else
  34.             echo "matando ppp0" >> $LOCAL_LOG
  35.             ifconfig ppp0 down 1>> $LOCAL_LOG 2>&1
  36.             sleep 1
  37.         fi
  38.         sleep 1
  39.         echo "Matando avahi-daemon" >> $LOCAL_LOG
  40.         killall -9 avahi-daemon 1>> $LOCAL_LOG 2>&1 #andei matando esse processo tmb, junto com o pppd, daí conectava
  41.         sleep 2
  42.         echo "usando porta:" $TTY >> $LOCAL_LOG
  43.         if pppd /dev/$TTY #Aqui que tenta resolver meu problema de "modem não respondendo" fazendo isso funciona novamente.
  44.         then
  45.             echo "pppd tty iniciado com sucesso" >> $LOCAL_LOG
  46.         else
  47.             echo "erro ao iniciar pppd /dev/tty, reiniciar o sistema" >> $LOCAL_LOG
  48.         fi
  49.         sleep 3
  50.         PPPD_FLAG=true
  51.         CONT_PPPD=0
  52.         while $PPPD_FLAG
  53.         do
  54.             PSAUX=$(ps aux | grep $TTY | grep -v grep | wc -l) #verifica se o pppd /dev/$TTY está em execução
  55.             if [ $PSAUX -eq 1 ] # se for = 1 é prq o processo existe
  56.             then
  57.                 echo "pppd $TTY em execucao, aguardando 3 segundos..." >> $LOCAL_LOG
  58.                 echo $CONT_PPPD >> $LOCAL_LOG
  59.                 CONT_PPPD=$(($CONT_PPPD + 1))
  60.                 sleep 3
  61.                 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
  62.                 then
  63.                     echo "Assassinando pppd $TTY e ppp0 \../ 0.o \../" >> $LOCAL_LOG
  64.                     if [ $PPP0 -eq 0 ]
  65.                             then
  66.                                     echo "ppp0 não existe" >> $LOCAL_LOG
  67.                             else
  68.                                     echo "matando ppp0, morre miserento" >> $LOCAL_LOG
  69.                                     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
  70.                                     sleep 1
  71.                             fi
  72.                     sleep 3
  73.                     killall -9 pppd 1>> $LOCAL_LOG 2>&1
  74.                     sleep 5
  75. #                   pppd /dev/$TTY
  76.                     PPPD_FLAG=false #vira false pra sair do while e tentar conectar
  77.                     CONT_PPPD=0
  78.                     CONT=0
  79.                 fi
  80.             else # se o pppd /dev/$TTY for encerrado sozinho, não preciso matá-lo
  81.                 echo $TTY "Morto ou encerrado, zerando cont e pppd_flag=false" >> $LOCAL_LOG
  82.                 PPPD_FLAG=false #vira false pra sair do while e tentar conectar
  83.                 CONT=0
  84.             fi
  85.         done
  86.     fi
  87. }
  88.  
  89. #gera um log para ver o comportamento do discador
  90. gerar_log() {
  91.     cp /etc/discador/discador.log /etc/discador/discador.log.tmp
  92.     sed -i '1,100d' /etc/discador/discador.log.tmp
  93.     cat /etc/discador/discador.log.tmp > /etc/discador/discador.log
  94. }
  95.  
  96. sleep 18
  97. LOCAL_LOG="/etc/discador/discador.log"
  98.  
  99. if ! [ -e $LOCAL_LOG ]
  100. then
  101.     touch $LOCAL_LOG
  102. fi
  103.  
  104. echo "**********I N I C I A N D O   D I S C A D O R**********" >> $LOCAL_LOG
  105. CONT=0
  106.  
  107. #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
  108. QT_PORTAS=$(ls /dev/ttyU* | wc -l)
  109. MAX_LOG=50000
  110.  
  111. if [ $QT_PORTAS -eq 4 ] #se entrou aqui é prq tá ligado na energia, doidera dimais né?
  112. then
  113.     while true
  114.     do
  115.         if ! ping -c 2 www.google.com.br || ! ping -c 2 www.terra.com.br
  116.         then
  117.             if [ -e /dev/ttyUSB3 ] && [ -e /dev/ttyUSB0 ] #se moutou /dev/ttyUSB0 ate USB3, a que disca é a USB2
  118.             then
  119.                 TTY="ttyUSB2"
  120.                 echo "usando dev " $TTY
  121.                 CONEXAO="vivo" #nome da conexao, criada no wvdial.conf
  122.                 echo "desconectado, conectando..." >> $LOCAL_LOG
  123.                 conectar #função la em cima
  124.                 CONT=$(($CONT+1))
  125.                 echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
  126.             elif [ -e /dev/ttyUSB4 ] #se moutou /dev/ttyUSB1 ate USB4, a que disca é USB3
  127.             then
  128.                 TTY="ttyUSB3"
  129.                 echo "usando dev" $TTY
  130.                 CONEXAO="vivo2" #nome da conexao, criada no wvdial.conf
  131.                 echo "desconectado, conectando..." >> $LOCAL_LOG
  132.                 conectar #função la em cima
  133.                 CONT=$(($CONT+1))
  134.                 echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
  135.             fi
  136.         else
  137.             date >> $LOCAL_LOG
  138.             echo "Conectado... 60 segundos para a proxima verificacao" >> $LOCAL_LOG
  139.             CONT=0
  140.             sleep 60
  141.         fi
  142.         #se o log chegar ao tamanho maximo ele chama o gerar_log que apaga as 100 linhas mais antigas
  143.         TAM_LOG=$(cat /etc/discador/discador.log | wc -l)
  144.                 if [ $TAM_LOG -gt $MAX_LOG ]
  145.                 then
  146.                         gerar_log # função la em cima
  147.                 fi
  148.     done
  149.  
  150. elif [ $QT_PORTAS -eq 3 ] #se entrou aqui é prq ligou o pc só na bateria
  151. then
  152.     while true
  153.     do
  154.         if ! ping -c 2 www.google.com.br || ! ping -c 2 www.terra.com.br
  155.         then
  156.             sleep 25
  157.             if [ -e /dev/ttyUSB2 ] && [ -e /dev/ttyUSB0 ] #disca na ttyUSB1
  158.             then
  159.                 TTY="ttyUSB1"
  160.                 echo "usando " $TTY
  161.                 CONEXAO="vivo3" #nome da conexao, criada no wvdial.conf
  162.                 echo "desconectado, conectando..." >> $LOCAL_LOG
  163.                 conectar #função la em cima
  164.                 CONT=$(($CONT+1))
  165.                 echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
  166.             elif [ -e /dev/ttyUSB3 ] #disca na ttyUSB2
  167.             then
  168.                 TTY="ttyUSB2"
  169.                 echo "usando " $TTY
  170.                 CONEXAO="vivo" #nome da conexao, criada no wvdial.conf
  171.                 echo "desconectado, conectando..." >> $LOCAL_LOG
  172.                 conectar #função la em cima
  173.                 CONT=$(($CONT+1))
  174.                 echo $CONT "tentativas seguidas de obter conexão" >> $LOCAL_LOG
  175.             fi
  176.         else #se tiver conectado aguarda 1 min para proxima verificação
  177.             date >> $LOCAL_LOG
  178.             echo "Conectado... 60 segundos para a proxima verificacao" >> $LOCAL_LOG
  179.             CONT=0
  180.             sleep 60
  181.         fi
  182.  
  183.         TAM_LOG=$(cat /etc/discador/discador.log | wc -l)
  184.         if [ $TAM_LOG -gt $MAX_LOG ]
  185.         then
  186.             gerar_log
  187.         fi
  188.     done
  189. else #se der erro ao montar o modem, nem tenta discar, isso só por segurança, nunca entrou aqui
  190.     echo "Portas ttyUSB não foram montadas corretamente, listando portas montadas" >> $LOCAL_LOG
  191.     ls /dev/ttyU* >> $LOCAL_LOG
  192. fi
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement