Existe uma maneira fácil de verificar a conectividade da Internet no console? Eu estou tentando brincar em um script de shell. Uma idéia que eu pareço é verificar o código de resposta HTTP para interpretar se a conexão com a Internet está funcionando bem. Mas acho que deve haver uma maneira fácil, sem a necessidade de verificar um site que nunca falha;)wget --spider http://www.google.co.in/
Edit: Parece que pode haver muitos fatores que podem ser examinados individualmente, coisa boa. Minha intenção no momento é verificar se meu blog está inativo. Eu configurei o cron para verificar a cada minuto. Para isso, estou verificando o código de resposta HTTP do wget --spider no meu blog. Se não for 200, ele me notificará (acredito que isso será melhor do que apenas fazer ping, pois o site pode estar com muita carga e pode estar atingindo o tempo limite ou responder muito tarde). Agora ontem, houve algum problema com minha Internet. A LAN estava conectada corretamente, mas não consegui acessar nenhum site. Então, continuo recebendo notificações, pois o script não conseguiu encontrar 200 na resposta do wget. Agora, quero ter certeza de que ele será exibido quando eu tiver conectividade com a Internet.
Portanto, verificar a conectividade DNS e LAN é um pouco exagerado para mim, pois não tenho essa necessidade específica de descobrir qual é o problema. Então, o que você sugere como eu faço isso?
Aqui está o meu script para continuar verificando o tempo de inatividade do meu blog:
#!/bin/bash
# Sending the output of the wget in a variable and not what wget fetches
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0
# Traverse the string considering it as an array of words
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means all good
fi
done
if [ $FLAG -eq '0' ]; then
# A good point is to check if the internet is working or not
# Check if we have internet connectivity by some other site
RESULT=`wget --spider http://www.facebook.com 2>&1`
for x in $RESULT; do
if [ "$x" = '200' ]; then
FLAG=1 # This means we do have internet connectivity and the blog is actually down
fi
done
if [ $FLAG -eq '1' ]; then
DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Downtime Alert!" "http://blog.ashfame.com/ is down."
fi
fi
exit
Dessa forma, preciso verificar a conectividade com a Internet somente quando houver um problema com o código de resposta do meu blog. É um pouco pesado (como eu não estou usando ping), mas não deve dar nenhum falso positivo. Direita? Além disso, como posso aleatoriamente executar ping em um site diferente a qualquer momento, como facebook, google, yahoo etc. Também (eu estava tentando evitar qualquer E / S), posso escrever em um arquivo de log no qual posso verificar a contagem de verificações de inatividade e depois pule as verificações adicionais até que o site esteja inoperante ou cause verificações mais longas (10 minutos em vez de cada minuto). O que você acha?
fonte
Respostas:
Verificando se um site específico está ativo
Primeiro, vários bons serviços de monitoramento online estão disponíveis. Para escolher um, o Pingdom inclui uma conta gratuita para monitorar um alvo. (Disclaimer: Eu sou não afiliado com Pingdom de qualquer forma).
Segundo, usar
wget --spider
para o seu próprio script é uma boa ideia. Você receberá alguns falsos positivos quando o computador estiver inoperante ou quando o servidor DNS não estiver funcionando. A verificação do código de retorno é uma maneira direta de implementar isso:Mais uma vez, existem deficiências nessa abordagem. Se o seu provedor armazenou em cache o seu registro DNS, mas o servidor DNS está inoperante, outras pessoas não podem acessar o site, mesmo que o monitoramento diga que está tudo bem. Você pode escrever uma solução alternativa curta
host
, por exemplohost example.com <your dns server IP>
. Isso retornará um erro se o servidor DNS não estiver respondendo, mesmo que o OpenDNS ou o servidor DNS do seu próprio provedor funcione bem.Verificando se a Internet está funcionando
Não há realmente uma maneira fácil de lidar com isso em todos os casos.
Você pode, por exemplo, executar
ping -c1
em vários sites conhecidos (por exemplo, www.google.com, facebook.com e ping.funet.fi) e verificar os códigos de retorno para determinar se algum destino é acessível. Você pode verificar automaticamente o código de retorno usando variável$?
. O parâmetro-c1
está limitando o número de pacotes de ping para um.Você pode encontrar problemas com alguns wifis públicos quando houver um gateway de login que redirecione todos os pedidos de pings e HTTP. Nesse caso, você pode obter respostas de ping e códigos de status HTTP sem erro, mesmo quando não pode acessar outros sites.
Se você deseja verificar o estado do cabo, pode usar
De saída (trecho):
No entanto, isso não indica se você realmente tem conectividade ou não, apenas se o cabo está conectado e se há algo do outro lado.
fonte
host
(consulta de DNS). É muito rápido também.Estou usando esse método ...
fonte
ping -c 1 8.8.8.8
eping -c 1 www.google.com
. Como é isso?Eu apenas usei
que pausa até que uma conexão de rede esteja presente pelo gerenciador de rede. Funcionou bem. Você também pode fazer outras coisas.
fonte
Verificar se um site está ativo geralmente é feito com uma ferramenta de monitoramento como
nagios
. Isso monitorará continuamente o site e poderá notificá-lo sobre interrupções.Ao verificar se a Internet está acima da linha de comando, executei várias etapas:
ping google.com
(verifica o DNS e o site acessível).wget
ouw3m
para buscar a página.Se a Internet não estiver ativa, diagnostique para fora.
Se a Internet estiver ativa, mas o site estiver inativo, verifique com a
w3m http://isup.me/example.com
substituiçãoexample.com
pelo site que aparece inativo. Use wget, lynx ou qualquer navegador de linha de comando disponível, se você não tiver o navegador w3m instalado.fonte
if ! wget --spider http:///example.com; then
.[ $? != 0 ]
é o mesmo que o teste! command
. O wget está documentado para retornar 0 em caso de sucesso e não 0 em caso de falha. O if se comporta de maneira idêntica de qualquer maneira que você o codifica. Se o wget retornar uma falha em uma resposta 200, o teste falhará de qualquer maneira que você a escrever. O mesmo se retornar 0 para um código de resposta diferente de 200.Este é o shell srcript que estou usando para testar a conectividade com a Internet:
alarm.sh
Você precisará instalar o curl e o mpg321
Você precisará de um arquivo de som .mp3 renomeado para alarm.mp3 na mesma pasta, se desejar a funcionalidade de alarme sonoro. Por fim, configure o URL do site e egrep de acordo com suas necessidades.
fonte
egrep -q
vez deegrep ... > /dev/null
while
loop?alarm.sh
wd; portanto, se você chamar esse script de um diretório diferente, ocorrerá um erro ou, se houver um script chamadoalarm.sh
no wd, ele será chamado. Então isso é uma prática ruim. Você poderia usar"$0"
, mas umwhile
loop seria melhor.Verificando se a Internet está funcionando
De saída (trecho):
No entanto, como mencionado por outros, isso não indica se você realmente tem conectividade ou não. Por exemplo. Você pode estar conectado ao roteador e o roteador não está necessariamente conectado à Internet.
fonte
nm-tool
foi removido no Ubuntu 15.04+, mas você pode usá-lonmcli
. Por exemplo[[ $(nmcli -f STATE -t g) = connected ]]
nmcli -f STATE -t nm
a coisa boa é ser independente de sites!nm-tool
enmcli
informará apenas se você está ou não conectado à rede local , ou seja, se você está ou não conectado à sua rede wifi / Ethernet doméstica. Não lhe dirá se você pode ou não alcançar algo além da sua rede local, como a Internet.Eu estou usando este método:
Ele tentará se conectar a um site conhecido e, se puder se conectar a ele, assumiremos que existe a Internet.
fonte
Eu precisava de ajuda com a mesma pergunta e recebi minha resposta desta maneira:
fonte
nm-online
comando ... Ele retornará 0 se tudo estiver bem. Usual em todas asUNIX
conchas.Verificar se a Internet está funcionando não é tão trivial. ping é ICMP, portanto, pode funcionar mesmo se o proxy da web estiver inativo. Algo semelhante ocorre com o DNS se você testar com um IP.
Como minha conexão com a Internet é instável, criei este script ( baseado neste ) que faz um som suave para me chamar e também usa o Ubuntu notify quando a conexão com a Internet volta:
fonte
Eu estava procurando por um script que testasse continuamente minha conexão com a Internet, que seria iniciado sempre que meu servidor estivesse ativo e fiz isso:
Primeiro, instale o fping
Crie um script init na pasta /etc/init.d com o seguinte conteúdo (chamei-o de testcon)
Crie um script na pasta /etc/init.d com o seguinte conteúdo (eu chamei de testcond)
Então, eu executo os comandos abaixo para adicionar à inicialização:
Reiniciar
fonte
Fui confrontado com excrementos aleatórios de conexões Wi-Fi pelos meus
Broadcom BCM94331CD
chip. Criei o seguinte script bash (loop infinito) verificando a cada segundo se a conexão Wi-Fi à Internet está ativa e funcionando. Outra linha de comando proposta aqui irá aguardar pelo menos 5 a 10 segundos antes de fechar com um status ieping
. Nesse meio tempo, também estou procurando uma solução definitiva.Dos resultados no askubuntu, terei que limpar o
bcmwl-kernel-source
pacote enquanto usofirmware-b43-installer
eb43-fwcutter
.Obrigado a todos por suas sugestões (acima).
Esse script precisa ser adicionado nos Programas de Inicialização e não precisa de
super user
privilégios para ser executado também.fonte