Reconexão automática para internet ADSL

Publicado por Iran Macedo (última atualização em 01/09/2010)

[ Hits: 7.934 ]

Download ichecker.sh




Quedas constantes em conexões ADSL em modems ainda como Bridges podem deixar você e seus servidores um pouco mais distantes. Não se sabe como, nem quando, mas é certo que uma hora sua internet cairá.

Este script garante que sua internet ficará fora do ar o mínimo de tempo o possível. Basta dar permissão de execução e agendar tarefa no cron.

Na configuração atual, o script rodará por até 1 minuto (ciclo) fazendo com que seja possível agendá-lo de minuto a minuto no Cron, sem que hajam vários processos iguais ao mesmo tempo.

Para rodar este script, seu servidor precisa ter:

1 - Cron
2 - pppoeconf (e demais ferramentas, tais como "pon" e "poff").

Para agendamento no cron, acesse a pasta onde está o script e copie-o no /etc/init.d:

# cp ichecker.sh /etc/init.d/

Dê permissão de execução para o script:

# chmod +x /etc/init.d/ichecker.sh

Dê o comando no terminal como root:

# crontab -e  <-- (Debian-like) ou
# vi /etc/crontab  <--  (Red Hat-like).

Escreva isto na penúltima linha (a última linha deve ficar em branco):

*/1 * * * * root /etc/init.d/ichecker.sh

Salve e saia da edição do Cron. Para acelerar um pouco mais o processo, releia o arquivo do cron:

# /etc/init.d/cron reload (Debian-like) ou
# service crond reload (Red Hat-like).

Para verificar se o agendamento está funcionando e que o script está fazendo o seu trabalho:

1 - desative sua conexão de internet.
2 - tail -f /var/log/ichecker.sh

Verifique se dentro de um minuto você receberá a mensagem de conexão restabelecida.

O último bloco do script é para receber mensagens no arquivo de Log, facilitando a verificação e leitura de funcionamento do serviço. Descomente as linhas para receber estas informações.

Script testado e aprovado nas distros Debian, Ubuntu Server e Fedora 13.

Abs.

  



Esconder código-fonte

#!/bin/bash

###############################################################
#
# Internet Checker - verifica e conecta seu link ADSL de internet, caso este esteja offline.
#
# Utiliza o comando [ ifconfig ] para encontrar a saída "ppp". Caso não receba esta saída
# o script aciona os comandos para forçar desconexão (link travado) e para nova conexão.
#
# Tem tempo definido de vida de aproximadamente 1 minuto. Isso evita que vários processos
# deste script sejam ativados ao mesmo tempo, gerando alta carga no sistema.
#
# O serviço pode ser rodado manual ou agendado através do Cron para que seja automático.
# Ele não gera interatividade com o usuário, nem joga saída de comandos na tela. Caso deseje
# fazer algo interativo, o agendamento com o Cron poderá não funcionar corretamente!
#
# Pode ser utilizado para verificar e levantar conexões de VPN (tun0, tun1, etc), se modificado
# corretamente. O arquivo está comentado. Faça mudanças com cuidado e atenção! Siga as pistas!
#
###############################################################
#
# Programa: ichecker.sh
# Versão 1.0
# Licença de uso: BSD
# Use, compartilhe, mantenha os créditos de quem criou e/ou ajudar a desenvolver.
#
###############################################################
#
# Versão 1.0:
# Verifica por saídas "ppp", por exemplo (ppp0, ppp1, pppn). Dá comando de nova conexão, caso
# saída não seja encontrada. # Tem ciclo de 1 minuto, aprox. Gera Log em /var/log/ichecker.log.
#
###############################################################
#
# Por Iran Macedo.
# E-mail: macedo dot if at gmail dot com
# última modificação: 29/08/2010.
#
###############################################################


contador=0
reconectado=0

# FUNÇÃO PRINCIPAL
Main() {

while [ "$contador" -lt "7" ];do

 unset status

 status=$(/sbin/ifconfig |grep -so ppp) # Verifica se existe conexão.

 if [ -z "$status" ];then #> /dev/null 2&1 # Se não tiver conexão...
 
    echo " " >> /var/log/icheck.log
 
    data=$(/bin/date +%Y-%m-%d-%H:%M:%S) # TimeStamp...

    echo "* Sem Conexão -> "$data"" >> /var/log/icheck.log # Informação pra Log...
 
###XXX - Cada ciclo terá 1 minuto, aproximadamente. Isso é gerado por
###XXX - 9 segundos (sleeps) vezes 6 loopings. Caso queira aumentar o ciclo,
###XXX - aumente a quantidade de loopings e não os segundos.

    /usr/bin/poff -a;poff -a # Utilizado por Debian-likes.
#   adsl-stop;adsl-stop # Utilizado por Red Hat-likes.
    sleep 5

    /usr/bin/pon dsl-provider # Utilizado por Debian-likes.
#   adsl-start # Utilizado por Red Hat-likes.
    sleep 4

    reconectado=1
    contador=$(($contador+1)) # Incrementa o valor do looping.
    
    Main # Chama Função Principal novamente para nova verificação (loop).

 else # Caso tenha conexão...

    if [ "$reconectado" -eq "1" -a -n "$status" ];then # Se a internet foi reconectada...

   echo " " >> /var/log/icheck.log

   data=$(/bin/date +%Y-%m-%d-%H:%M:%S) # TimeStamp...

        echo "* Conectado em: "$data"" >> /var/log/icheck.log # Marca a hora da reconexão.
   exit 0 # Força saída do programa, independente do looping.

    fi

 fi

##XXX - Descomente estas linhas abaixo para verificar se o
##XXX   agendamento no Cron está funcionando perfeitamente.
##XXX - Comando [ tail-f /var/log/icheck.log ]

# if [ "$reconectado" -eq "0" -a -n "$status" ];then
#
#   echo " " >> /var/log/icheck.log
#   data=$(/bin/date +%Y-%m-%d-%H:%M:%S) # TimeStamp...
#   echo "* Verificado em: "$data"" >> /var/log/icheck.log
#   exit 0 # Força saída do programa, independente do looping.
#
# fi

done

}

Main

Scripts recomendados

Automatizando com Script-Expect

Cadastro SHELL SCRIPT/MySQL/PHP

Script - Shell

Script simples para fazer backup em fita DAT

Script de monitoracao de servicos


  

Comentários
[1] Comentário enviado por ifmacedo em 01/09/2010 - 14:34h

Só uma correção...

Ignore o segundo comando em:
2 - tail -f /var/log/ichecker.sh

Na verdade, o que precisamos ver é o Log do ichecker. Então seria:
2 - tail -f /var/log/ichecker.log

Mea culpa! :)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts