Posso reiniciar automaticamente se estiver desconectado da internet?

5

Eu tenho uma área de trabalho antiga que estou executando como um servidor da web de minha casa enquanto estou na faculdade. A internet em casa é péssima e, muitas vezes, quando ela cai, a área de trabalho não pode se reconectar sem uma reinicialização.

Existe uma maneira de fazer um script que carrega na inicialização e, a cada 12 horas, tentará fazer o ping do roteador e, se ele falhar, reinicializará o servidor?

EDITAR: Ok, eu consegui fazer este script depois de pesquisar um pouco.

#!/bin/bash

ping -c 1 192.168.1.1 > /dev/null
if [ $? -ne 0 ]; then
  reboot
fi

Isso testa se o ping é bem-sucedido e se não é reinicializado.
Agora, o que preciso fazer para que isso seja executado em um horário definido?

    
por Aaronneyer 14.01.2012 / 18:07

1 resposta

5

Você não mencionou o sistema operacional, mas se estiver usando o Windows, algo como isso pode ser útil: JScript para Ping, Renovar IP e Informações de Rede / Reparo .

Este é um script que eu montei para um problema semelhante. Ele faz praticamente exatamente o que você está procurando, pois ele pinga o gateway padrão (que será seu roteador) em um determinado cronograma e, em seguida, toma a ação necessária se o ping falhar.

Nesse caso, os PCs com problema não precisaram ser reinicializados, mas basta ter um ipconfig /release e ipconfig /renew com script para recuperar a conectividade. Algo como isso pode funcionar bem para o seu caso também. Se uma reinicialização completa ainda for necessária, esse script poderá ser facilmente modificado para considerar isso também.

Para o Linux, você pode usar um script de shell como este:

#!/bin/sh

ping -c5 192.168.1.1

if [ $? -eq 0 ]; then
    echo "ok"
else
    reboot
fi

Isso funciona devido ao código de retorno de ping , conforme detalhado na página do manual :

If ping does not receive any reply packets at all it will exit with code 1. If a packet count and deadline are both specified, and fewer than count packets are received by the time the deadline has arrived, it will also exit with code 1. On other error it exits with code 2. Otherwise it exits with code 0. This makes it possible to use the exit code to see if a host is alive or not.

Depois de substituir 192.168.1.1 pelo endereço do seu roteador, você pode agendar isso para ser executado a cada hora usando o cron. Para reiniciar, você precisará executar isso como root . Para o Ubuntu padrão, você pode adicionar uma tarefa cron usando:

sudo crontab -e

Para que essa verificação seja executada a cada hora, por exemplo:

00 * * * * /path/to/script/pingRouterCheckReboot.sh

Você precisará garantir que o script seja executável ( chmod +x ).

Se você achar que baixar a interface e fazer o backup é suficiente, você pode fazer isso em vez de ifdown eth0; ifup eth0 . Ou combine abordagens: primeiro faça isso e faça o teste de ping novamente. Se a conectividade ainda não for restaurada, force a medida drástica de uma reinicialização completa.

    
por 14.01.2012 / 18:32