Je veux utiliser ping pour vérifier si un serveur est actif. Comment pourrais-je faire ce qui suit:
ping $URL if [$? -eq 0]; then echo "server live" else echo "server down" fi
Comment pourrais-je accomplir ce qui précède? En outre, comment pourrais-je faire en sorte qu’il renvoie 0 à la première réponse ping, ou renvoie une erreur si les dix premiers pings échouent? Ou, y aurait-il une meilleure façon d’accomplir ce que j’essaie de faire ci-dessus?
Vous pouvez utiliser quelque chose comme ça –
serverResponse=`wget --server-response --max-redirect=0 ${URL} 2>&1` if [[ $serverResponse == *"Connection refused"* ]] then echo "Unable to reach given URL" exit 1 fi
Utilisez l’option -c avec ping, il cinglera l’URL seulement le nombre de fois ou jusqu’à expiration du délai
if ping -c 10 $URL; then echo "server live" else echo "server down" fi
Forme courte:
ping -c5 $SERVER || echo 'Server down'
En avez-vous besoin pour un autre script? Ou essayez-vous de pirater un outil de surveillance simple? Dans ce cas, vous pouvez consulter Pingdom: https://www.pingdom.com/ .
J’utilise la fonction de script suivante pour vérifier les serveurs en ligne ou non. C’est utile quand vous voulez vérifier plusieurs serveurs. La fonction cache la sortie ping et vous pouvez gérer séparément le serveur en direct ou le serveur en panne.
#!/bin/bash #retry count of ping request RETRYCOUNT=1; #pingServer: implement ping server functionality. #Param1: server hostname to ping function pingServer { #echo Checking server: $1 ping -c $RETRYCOUNT $1 > /dev/null 2>&1 if [ $? -ne 0 ] then echo $1 down else echo $1 live fi } #usage example, pinging some host pingServer google.com pingServer server1
Je recommande de ne pas utiliser uniquement le ping
. Il peut vérifier si un serveur est en ligne en général, mais vous ne pouvez pas vérifier un service spécifique sur ce serveur.
Mieux vaut utiliser ces alternatives:
homme curl
Vous pouvez utiliser curl
et vérifier la http_response
pour un webservice comme celui-ci
check=$(curl -s -w "%{http_code}\n" -L "${HOST}${PORT}/" -o /dev/null) if [[ $check == 200 || $check == 403 ]] then # Service is online echo "Service is online" exit 0 else # Service is offline or not working correctly echo "Service is offline or not working correctly" exit 1 fi
où
HOST
= [ip ou dns-name de votre hôte] PORT
= [facultatif un port; N’oubliez pas de commencer par :
] 200
est le succès normal http_response 403
est une redirection, par exemple peut-être vers une page de connexion, donc aussi accessible et signifie probablement que le service fonctionne correctement
-s
Mode silencieux ou silencieux.
-L
Définit l’emplacement -w
Dans quel format vous voulez afficher la réponse %{http_code}\n
nous voulons seulement le http_code -o
le fichier de sortie /dev/null
redirige toute sortie vers / dev / null afin qu’elle ne soit pas écrite dans stdout ou la variable de check
. Habituellement, vous obtiendrez le code source html complet avant http_response, vous devez donc le faire également. homme nc
Bien que curl
me semble être la meilleure option pour les Webservices car il vérifie vraiment si la page Web du service fonctionne correctement,
nc
peut être utilisé pour vérifier rapidement si un port spécifique sur la cible est accessible (et supposons que cela s’applique également au service).
L’avantage ici est le délai d’attente paramétrable, par exemple 1 seconde, tandis que l’échec peut prendre un peu plus de temps, et bien sûr, vous pouvez également vérifier les services qui ne sont pas une page Web comme le port 22
pour SSH
.
nc -4 -d -z -w 1 &{HOST} ${PORT} &> /dev/null if [[ $? == 0 ]] then # Port is reached echo "Service is online!" exit 0 else # Port is unreachable echo "Service is offline!" exit 1 fi
où
HOST
= [ip ou dns-name de votre hôte] PORT
= [ NON facultatif au port] -4
force IPv4 (ou -6
pour IPv6) -d
Ne pas essayer de lire depuis stdin -z
Seulement écouter, ne pas envoyer de données -w
timeout nc
va sortir 1 -> échec.) (facultatif) -n
Si vous utilisez uniquement une adresse IP: ne faites aucune recherche DNS ou de service sur les adresses, noms d’hôte ou ports spécifiés.
&> /dev/null
N’imprimez aucune sortie de la commande
Une bonne solution consiste à utiliser MRTG (un outil graphique simple pour * NIX) avec un script ping-probe. Cherchez sur Google.
lisez ceci pour commencer.
Exemple de graphique: