Reinicie o computador se a conexão com a internet cair

4

Estou tentando escrever um pequeno script que verifica a conexão com a Internet. Se nenhuma internet for detectada, ela tentará novamente em outros 10 minutos ... e se ainda não houver internet, ela reinicia o computador. Eu escrevi isso até agora. Qualquer idéia para sugerir melhoria / eficiência / melhor código é apreciada.

#!/bin/bash
# Script to restart the computer if there is no internet connection 
#   within the next 10 minutes of whenever the script is run, which 
#   I'll setup via crontab to run every half an hour. 

IS='/bin/ping -c 5 8.8.8.8 | grep -c "64 bytes"'        

if (test "$IS" -gt "2") then                                
        internet_conn="1"
    exit
else
    internet_conn="0"
    sleep 600

    AA='/bin/ping -c 5 74.125.226.18 | grep -c "64 bytes"'

    if (test "$AA" -gt "2") then                                
        internet_conn="1"
        exit
    else
        sudo shutdown -r now
    fi
fi
    
por Sparctus 09.12.2011 / 17:20

4 respostas

2

Acho que seu script deve funcionar bem, mas você pode querer verificar mais lugares do que apenas um servidor DNS. Concedido, é um grande DNS que provavelmente nunca vai cair, mas você não quer reiniciar o seu servidor, se acontecer de eles estarem fazendo manutenção nesse IP, então eu iria verificar talvez três fontes e se todos eles mostram como para baixo, em seguida, reinicie o seu servidor.

Além disso, pode ser mais prudente simplesmente reduzir a interface e fazer o backup em vez de reinicializar?

    
por 01.02.2013 / 15:20
1

Pequena sugestão, você não precisa do grep para avaliar se o ping foi bem-sucedido. O ping sai com 0 se for bem-sucedido e 1 ou mais se ocorrer um erro. Então você também pode fazer o script da seguinte maneira. O $? variável mostra o código de retorno do último comando executado.

/bin/ping -c 5 8.8.8.8

if ( $? -ge 1); then
 ......
fi
    
por 09.12.2011 / 20:11
0

Aqui está uma abordagem que usa at para reagendar em 10 minutos para verificar novamente.

#!/bin/bash
count=${1:-1}
if /bin/ping -c 5 8.8.8.8 2>&/dev/null; then                                
    if [ $count -eq 2 ]; then
        sudo shutdown -r now
    else
        at now + 10 minutes <<< "$0 $((count + 1))"
    fi
fi
    
por 09.12.2011 / 20:12
0

Seu comentário em um túnel ssh reverso "stalling" após um tempo provavelmente se deve a um roteador NAT tentando minimizar sua tabela de conexões abertas e deve ser resolvido usando a diretiva "ServerAliveInterval" conforme explicado no OpenSSH FAQ .

Em alguns casos, o roteador / firewall está cortando suas sessões agressivamente de qualquer maneira (ruim!) quando o link fica ocioso por um longo tempo, o que obriga a diminuir o ServerAliveInterval (cf. nota ).

O truque neste caso é usar um tipo de wrapper monitorando o daemon ssh e reiniciá-lo quando necessário, autossh faz exatamente isso, isso deve resolver seu problema imediatamente!

note : Isso é algo que você deseja limitar, pois aumentar a frequência de pacotes keep-alive em um link instável aumenta o risco de desconexões; que são definidos como pacotes de resposta keepalive x , na realidade pacotes TCP ACK, falharam sucessivamente.

Se o seu link for confiável, sinta-se à vontade para baixar essa diretiva para sua conveniência (seja prudente, você não precisa de um pacote keepalive por segundo) para detectar desconexões mais rápidas do servidor.

PS: Para explicar o meu comentário sobre a questão, estou um pouco repelido pelas idéias de usar o ping como condição para reiniciar um serviço e usá-lo em um servidor que você não possui e, portanto, não pode garantir o disponibilidade, talvez amanhã o google decidirá parar de responder a echo pings e seu servidor continuará reinicializando indefinidamente.

Outro problema é o que você define como "conexão de internet" é, por definição, uma grande coleção de redes e testar um único ponto final pode ser muito pequeno para ter uma idéia da sua conectividade na rede É por isso que os serviços de monitoramento na Web usam vários links para acompanhar o tempo de resposta / tempo de atividade / etc ...

    
por 11.12.2011 / 18:23

Tags