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.
Vous pouvez utiliser ping -c4 $ip_address
où $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.
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'
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.
Vous pouvez utiliser ces options à partir de la page de manuel ping:
(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
Où
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
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.
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