frederic1
17/01/2007, 23h49
Voici un petit script que j'ai codé (fait maison) qui permet de savoir si une machine est down ou met du temps à répondre au Ping.
J'ai testé le script sous Gentoo64 Release 2 OVH :
En clair, si vous pingez la machine (ping -w 10) et que vous obtenez :
Alors tout va bien. Aucune alerte n'est envoyée.
Par contre, si vous obtenez :
... alors vous allez recevoir le 1er mail d'erreur ("Serveur inexistant !")
Si vous obtenez :
... alors vous allez recevoir le 2nd mail d'erreur ("Serveur injoignable !")
Si vous obtenez :
... alors vous allez recevoir le 3ème mail d'erreur ("Serveur trop lent !")
Enfin, si vous obtenez :
... alors vous allez recevoir le 4ème mail d'erreur ("Serveur muet !")
J'ai testé le script sous Gentoo64 Release 2 OVH :
Code:
#!/usr/local/bin/php -q // Nom de la machine à pinger $host = "ns00000.ovh.net"; // Le ping va durer 10s maximum $pings = 10; // Les paquets doivent être renvoyés en moins de 100ms // (mettez une grosse valeur si le temps de réponse importe peu) $timeout = 100; // Date et Heure actuelles $date = date("d/m/Y à H:i:s"); // On envoit le rapport à cette adresse $mailto = "erreurs@monsite.com"; // E-Mail de l'expéditeur du mail $mailfrom = "pings@monsite.com"; // Emplacement du fichier log qui stoquera les erreurs $logfile = "/home/monsite.com/temp/pings.txt"; /*********************************************************************/ // On pingue la machine "$host". L'exécution dure maximum : "$pings" secondes exec( "ping $host -w $pings", $exec ); // On traite chaque ligne de réponse foreach ( $exec as $line ) { // Si l'adresse de la machine est incorrecte if ( strpos($line,'unknown host')!==false ) { $nohost = true; } // Si la machine existe mais ne répond pas elseif ( strpos($line,'Destination Host Unreachable')!==false ) { $died = true; } // Si la machine répond alors on récupère le temps de réponse elseif ( preg_match("/time=(\d+)/",$line,$ms) ) { // Si la machine met plus de "$timeout" ms à répondre ... if ( $ms[1] > $timeout ) $error++; // Sinon ... else $noerror++; }; }; // Si l'adresse de la machine est incorrecte if ( $nohost ) { // On envoit un mail d'erreur $message = "$date : $host n'existe pas ou plus : \"Unknown Host\" !\n"; // Dans l'ordre : Destinataire, Sujet, Corps et Expéditeur du mail @mail( "$mailto", "$host : Serveur inexistant !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" ); } // Si la machine existe mais ne répond pas elseif ( $died ) { $message = "$date : $host n'a pas répondu : \"Destination Host Unreachable\" !\n"; @mail( "$mailto", "$host : Serveur injoignable !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" ); } // Si à plus de 5 reprises, la réponse du ping a dépassé les "$timeout" ms. elseif ( $error > 5 ) { $message = "$date : $host a répondu en plus de $timeout ms, à $error reprises !\n"; @mail( "$mailto", "$host : Serveur trop lent !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" ); } // Si la machine a reçu le ping mais n'a pas répondu (par exemple en cas de firewall) elseif ( !$error && !$noerror ) { $message = "$date : $host a été joint mais n'a pas répondu !\n"; @mail( "$mailto", "$host : Serveur muet !", $message, "From: $mailfrom\nReply-To: $mailfrom\n" ); }; // Enregistrement de l'erreur dans un fichier log if ( $message ) { $fp = fopen( $logfile, 'a' ) or die ("Erreur d'écriture dans le fichier $logfile"); fputs( $fp, $message ); fclose( $fp ); }; ?>
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data. 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=1 ttl=63 time=0.297 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=2 ttl=63 time=0.304 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=3 ttl=63 time=0.262 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=4 ttl=63 time=0.221 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=5 ttl=63 time=0.320 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=6 ttl=63 time=0.371 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=7 ttl=63 time=0.315 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=8 ttl=63 time=0.376 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=9 ttl=63 time=0.383 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=10 ttl=63 time=0.201 ms --- host ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9005ms rtt min/avg/max/mdev = 0.201/0.305/0.383/0.059 ms
Par contre, si vous obtenez :
Code:
ping: unknown host ns00000.ovh.net
Si vous obtenez :
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data. From ns00000.ovh.net icmp_seq=2 Destination Host Unreachable --- ns00000.ovh.net ping statistics --- 2 packets transmitted, 0 received, +1 errors, 100% packet loss, time 1000ms
Si vous obtenez :
Code:
PING ns00000.ovh.net (0.0.0.0) 56(84) bytes of data. 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=1 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=2 ttl=238 time=165 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=3 ttl=238 time=165 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=4 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=5 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=6 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=7 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=8 ttl=238 time=166 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=9 ttl=238 time=165 ms 64 bytes from ns00000.ovh.net (0.0.0.0): icmp_seq=10 ttl=238 time=165 ms --- ns00000.ovh.net ping statistics --- 10 packets transmitted, 10 received, 0% packet loss, time 9022ms rtt min/avg/max/mdev = 165.631/166.075/166.987/0.504 ms
Enfin, si vous obtenez :
Code:
PING ns00000.ovh.net (81.64.128.84) 56(84) bytes of data. --- ns00000.ovh.net ping statistics --- 10 packets transmitted, 0 received, 100% packet loss, time 9027ms