42 votes

Comment puis-je vérifier la connectivité Internet dans une console?

Existe-t-il un moyen simple de vérifier la connectivité Internet depuis la console ? J'essaie de jouer dans un script shell. Une idée que j'ai est d'utiliser wget --spider [http://www.google.co.in/](http://www.google.co.in/) et de vérifier le code de réponse HTTP pour interpréter si la connexion Internet fonctionne correctement. Mais je pense qu'il doit y avoir un moyen plus simple sans avoir besoin de vérifier un site qui ne plante jamais ;)

Éditer : Il semble qu'il y ait beaucoup de facteurs qui peuvent être examinés individuellement, c'est une bonne chose. Mon intention pour le moment est de vérifier si mon blog est en panne. J'ai configuré une tâche cron pour vérifier cela toutes les minutes. Pour cela, je vérifie le code de réponse HTTP de wget --spider pour mon blog. Si ce n'est pas 200, il me notifie (je crois que ce sera mieux que de simplement le pinguer, car le site peut être sous une charge importante et peut être en train de temporiser ou de répondre très tard). Hier, il y avait un problème avec mon Internet. Le LAN était connecté correctement mais je ne pouvais tout simplement pas accéder à aucun site. Donc je continue de recevoir des notifications car le script ne pouvait pas trouver 200 dans la réponse de wget. Maintenant je veux m'assurer qu'il m'affiche une notification lorsque j'ai une connectivité Internet.

Donc, vérifier la connectivité DNS et LAN est un peu excessif pour moi car je n'ai pas vraiment besoin de savoir quel est le problème. Alors que suggérez-vous comment je peux le faire ?

Voici mon script pour continuer à vérifier les temps d'arrêt pour mon blog :

#!/bin/bash

# Envoyer la sortie de wget dans une variable et non ce que fetches wget
RESULT=`wget --spider http://blog.ashfame.com 2>&1`
FLAG=0

# Parcourir la chaîne en la considérant comme un tableau de mots
for x in $RESULT; do
    if [ "$x" = '200' ]; then
        FLAG=1 # Cela signifie tout va bien
    fi
done

if [ $FLAG -eq '0' ]; then
    # Un bon point est de vérifier si Internet fonctionne ou non
        # Vérifier si nous avons une connectivité Internet par un autre site
        RESULT=`wget --spider http://www.facebook.com 2>&1`
        for x in $RESULT; do
            if [ "$x" = '200' ]; then
                FLAG=1 # Cela signifie que nous avons une connectivité Internet et que le blog est effectivement en panne
            fi
        done

    if [ $FLAG -eq '1' ]; then
        DISPLAY=:0 notify-send -t 2000 -i /home/ashfame/Dropbox/Ubuntu/icons/network-idle.png "Alerte de temps d'arrêt !" "http://blog.ashfame.com/ est en panne."         
    fi  
fi

exit

Ainsi, je n'ai besoin de vérifier la connectivité Internet que là où il y a un problème avec le code de réponse de mon blog. C'est un peu lourd (car je n'utilise pas ping) mais ne devrait pas donner de faux positifs. N'est-ce pas ? De plus, comment puis-je randomiser les pings vers un site différent à chaque fois, comme facebook, google, yahoo, etc. De plus (j'essayais d'éviter toute E/S) je peux écrire dans un fichier journal par lequel je peux vérifier le nombre de vérifications des temps d'arrêt et ensuite sauter les vérifications ultérieures jusqu'à ce que le site soit en panne ou provoque des vérifications plus longues (10 minutes au lieu de chaque minute). Qu'en pensez-vous ?

0voto

Antonio Points 1391

J'étais confronté à des pertes aléatoires de connexions Wi-Fi par mon chip Broadcom BCM94331CD. J'ai conçu le script bash suivant (boucle infinie) vérifiant chaque seconde si la connexion Wi-Fi Internet est en cours. D'autres commandes proposées en ligne attendront au moins 5 à 10 secondes avant de se fermer avec un statut i.e. ping. En attendant, je cherche également une solution définitive.

D'après les résultats sur askubuntu, je devrai purger le package bcmwl-kernel-source car j'utilise firmware-b43-installer and b43-fwcutter.

Merci à tous pour leurs suggestions (ci-dessus).

Ce script doit être ajouté dans les programmes de démarrage et n'a pas besoin de privilège super utilisateur pour s'exécuter.

#!/bin/bash
#

# Vérifie si le Wi-Fi est désactivé par ex. 'hors de portée'
# Si c'est le cas, réactive rapidement le Wi-Fi
# En raison d'un problème avec le driver propriétaire Broadcom dans le package firmware-b43-installer

# Script fait partie des programmes de démarrage
# Stocké dans /usr/local/bin/
# Boucle infinie vérifiant chaque seconde si le Wi-Fi fonctionne

while true; do
  # https://askubuntu.com/questions/27954/how-can-i-check-internet-connectivity-in-a-console
  if [[ $(nmcli -f STATE -t g) != 'connected' ]]; then
    # Désactive et réactive le Wi-Fi car le Wi-Fi est maintenant "hors de portée" (déconnecté)
    nmcli radio wifi off
    nmcli radio wifi on
  fi
  sleep 1
done

0voto

J'ai lu tout cela mais je ne vois aucune mention de l'utilisation de monit pour vérifier la même chose.

Avec monit, le principe de ping est appliqué lorsque vous définissez quelque chose comme ceci dans le fichier monitrc :

check host OnlineStatus with address 1.1.1.1

J'ai utilisé CloudFlare 1.1.1.1, mais bien sûr vous pouvez utiliser un domaine ou une autre adresse IP comme prescrit sur le site web de monit et son wiki. Vous pouvez ensuite définir ce qu'il doit faire si ce ping échoue, par exemple :

   if failed icmp type echo count 3 with timeout 10 seconds then exec "command-or- script"

Que ce soit pour vérifier si votre serveur est en ligne (connecté à internet) ou si certains services comme le serveur web ou de messagerie fonctionnent toujours ou même les redémarrer en cas d'échec, vous pouvez compter sur monit, à condition de l'avoir installé sur votre serveur et de l'avoir configuré en conséquence.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X