web-dev-qa-db-fra.com

Script shell pour vérifier si un serveur est accessible?

J'ai 5 serveurs Solaris présents sur différents emplacements . Parfois, certains de ces serveurs ne sont pas accessibles depuis mon emplacement pour diverses raisons (que ce soit en raison de problèmes de réseau ou de la panne soudaine du serveur).

Je voudrais donc écrire un script Bash Shell pour vérifier s’ils sont joignables. Ce que j'ai essayé, c'est:

ssh ipaddress "uname -a"

L'authentification par mot de passe moins est définie. Si je ne reçois aucun résultat, je générerai un courrier.

  1. Existe-t-il d'autres moyens de vérifier l'accessibilité du serveur?
  2. Lequel est le meilleur moyen?
  3. Est-ce que ce que j'ai essayé est correct?
13
Balaswamy Vaddeman

Vous pouvez utiliser ping -c4 $ip_address$ip_address est l'adresse IP de votre serveur distant et analyser la sortie pour capturer les paquets ayant abouti et/ou les paquets ayant échoué et utiliser mail -s pour envoyer le journal par courrier électronique. 

Voici quelque chose pour vous aider à démarrer et vous pouvez en tirer parti. 

ping -c4 www.google.com | awk '/---/,0'

Cela donnera une sortie comme celle-ci -

[jaypal:~/Temp] ping -c4 www.google.com | awk '/---/,0'
--- www.l.google.com ping statistics ---
4 packets transmitted, 4 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 36.638/36.870/37.159/0.196 ms

J'ai vérifié le man-page sous Solaris pour ping. La sortie de ping sous Solaris est différente. En outre, sous Linux, vous limitez le nombre de paquets en indiquant -c et le nombre de paquets. Sous Solaris, vous devriez faire -

ping -s www.google.com 2 4

/usr/sbin/ping -s [-l | -U] [-adlLnrRv] [-A addr_family]
[-c traffic_class] [-g gateway [ -g gateway...]] [-
F flow_label] [-I interval] [-i interface] [-P tos] [-
p port] [-t ttl] Host [data_size] [npackets]
                           ^           ^
                           |           |
---------------------------------------  

Malheureusement, je n'ai pas de boîte solaire pour vous aider. 

4
jaypal singh

Votre commande ssh testera plus que si le serveur est accessible - pour que cela fonctionne, le serveur ssh doit être en cours d'exécution et tout doit être correct avec l'authentification.

Pour voir si les serveurs sont en place, pourquoi pas un simple ping?

ping -c1 -W1 $ip_addr && echo 'server is up' || echo 'server is down'
22
gcbenison

La vérification la plus simple que vous puissiez faire est probablement d'utiliser netcat pour vérifier les ports ouverts.

pour vérifier l'accessibilité SSH (port 22), vous pouvez faire

if nc -z $server 22 2>/dev/null; then
    echo "$server ✓"
else
    echo "$server ✗"
fi

depuis la page de manuel:

-z Spécifie que nc doit simplement rechercher les démons d'écoute, sans leur envoyer de données.

20
flying sheep

Vous pouvez utiliser ces options à partir de la page de manuel ping: 

  • envoyer seulement un paquet ("c1"), 
  • mode silencieux ("q"), 
  • (facultatif) Attendez une seconde pour une réponse ("W1")

    ping -c1 -W1 -q $server

Ping renvoie différents codes de sortie en fonction du type d'erreur ..__ Donc, pour vérifier si cela a fonctionné ou non, il suffit de faire "echo $?" pour obtenir le code de sortie. Comme ça: 

ping 256.256.256.256 ; echo $?
# 68

ping -c 1 127.0.0.1 ; echo $?
# 0

ping -c 1 192.168.1.5 ; echo $?
# 2

0 means Host reachable
>0 means unreachable

Donc, pour tester cela dans un script bash, vous pouvez faire quelque chose comme:

ping -c1 -W1 -q $server &>/dev/null
status=$( echo $? )
if [[ $status == 0 ]] ; then
     #Connection success!
else
     #Connection failure
fi
5
Katie S

Vous pouvez utiliser la commande ci-dessous, 

ping -c1 -W1 ip_addr || echo 'server is down'  

vous ne pouvez pas utiliser $ ip_addr car cela enlèvera le premier numéro de votre IP.

0
rocket singh

Vous pouvez utiliser l'approche nc -z -G 2 SERVER_Host PORT avec G au lieu de W -> G utilisé pour le délai d'attente avant que la connexion soit établie, de sorte que l'hôte est inaccessible, vous saurez plus vite

0
Ivo Varbanov