Comment vérifier si un serveur est en cours d’exécution

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:

boucle

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 

  • HOST = [ip ou dns-name de votre hôte]
  • (facultatif) 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.

Caroline du Nord

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 

  • 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
    Si une connexion et stdin sont inactifs pendant plus de secondes, la connexion est silencieusement fermée. (Dans ce cas, 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:

Exemple de graphique