Como posso executar um script quando a conexão com a Internet está prestes a se perder?

4

Eu uso o wvdial (discador PPP) com um modem de cartão SIM e às vezes essa conexão é redefinida pelo lado do servidor. Eu gostaria de executar um script que greps ifconfig para obter um volume de dados baixados e armazena em algum lugar. Obviamente, isso tem que ser feito quando a conexão ainda estiver ativa, caso contrário, não receberei nada ou, alguns segundos depois, um valor para conexão nova, porque wvdial está configurado para reconectar imediatamente quando a conexão for perdida. Alguma idéia?

Editar:

É claro que posso fazer a saída de ifconfig a cada segundo ou dois, mas essa é uma solução horrível que nem vale a pena considerar. O melhor cenário que posso imaginar é de alguma forma capturar o sinal que instrui ifconfig para "redefinir a contagem" = > suspender o sinal por um momento = > execute meu script = > desbloqueie o sinal. Mas talvez existam outras possibilidades que eu não conheço, como por exemplo configurar o ifconfig para despejar o resultado anterior em um arquivo se a interface dada desaparecer. Outra opção é tirar a saída não de ifconfig por outro lugar. BTW, qual é a fonte de entrada para ifconfig ?

    
por WeSenseASoulInSearchOfAnswers 02.10.2014 / 00:21

2 respostas

2

você pode escrever o seu próprio script de shell que registra exatamente o que você quer, dentro de um loop while (1) com uma chamada de sono no final (ou qualquer duração de sono que você queira). Algo parecido com isto:

function get_logname
  {
  echo 'date +'%F-%H-%M-%S''.log
  }

function am_online
  {
   ping -c 1 google.com  >/dev/null 2>&1
   echo $?
  }

function update_logfile
  {
  echo "YOUR DATA TO BE LOGGED" >> $1 
  }

  CUR_LOG='get_logname'
  echo $CUR_LOG
  while [ 1 ]; do
        if [ "'am_online'" -eq 0 ]; then
           update_logfile $CUR_LOG
        else
           echo "we are offline!"
       CUR_LOG='get_logname'
        fi

        sleep 1
  done

Enquanto estiver on-line, ele registra no seu arquivo de registro (> > para anexar novos dados, > para reescrever o arquivo para conter apenas os novos dados) a cada segundo. Quando você está offline, ele continuamente seleciona um novo nome para o próximo arquivo de log e não registra nada. Quando você voltar a ficar on-line, ele começa a efetuar login em um novo arquivo de log com o último nome de arquivo de log selecionado, deixando os outros arquivos de log intactos.

Isso deve fazer o truque para você. Tal como acontece com todo o código que encontra online, é da sua responsabilidade testá-lo e certificar-se de que ele faz o que deseja e não quebra nada. Especificamente neste caso, cuidado com o fato de que os arquivos de log podem aumentar de tamanho rapidamente, e que, se você ficar off-line com frequência, poderá acabar com vários arquivos de log.

Salve como algo como "my_internet_logging_script.sh" e execute como:

sh my_internet_logging_script.sh

no diretório onde você deseja que seus arquivos de log (ou edite o script de acordo) apareçam.

    
por 02.10.2014 / 01:28
1

Respondendo sua última pergunta: ifconfig/proc/net/dev e /proc/net/if_inet6 . Informações sobre dados transmitidos para diferentes interfaces estão disponíveis no primeiro desses arquivos.

/proc é um sistema de arquivos especial cujos arquivos não são armazenados no disco rígido, mas são criados pelo kernel toda vez que você quer lê-los, assim o acesso aos arquivos é muito rápido. Além disso, analisar /proc/net/dev diretamente deve ser um pouco mais rápido, em seguida, analisar ifconfig , já que o comando faz coisas diferentes das quais você não precisa.

Só para ter uma ideia aproximada, chegou a hora de 1000% ifconfig ou cat /proc/net/dev (comando repeat zsh ):

$ time (repeat 1000 ifconfig > /dev/null)
1.14s user 3.85s system 90% cpu 5.513 total
$ time (repeat 1000 cat /proc/net/dev > /dev/null)
0.57s user 2.44s system 70% cpu 4.282 tota

É claro que analisar /proc/net/dev ainda não é a solução boa , mas pelo menos você pode ganhar 20-30% em velocidade se, afinal, você decidir analisar a saída a cada segundo.

    
por 07.10.2014 / 16:43