Script de ping - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 20-12-2006 à 12:12:54
renaud-twingo a écrit : Gros débutant sous Linux, je suis en train de découvir les joies de Linux et plus précisement de Debian. 1ère étape: |
Faut demander à cron, c'est son boulot.
Marsh Posté le 20-12-2006 à 14:35:24
OK pour le Crontab, mais là ou j'ai plus de mal c'est pour le script...
Marsh Posté le 20-12-2006 à 15:08:04
Un script c'est un fichier texte ou tu écris exactement ce que tu taperais dans la console
Les 2 différences :
-ce fichier comment forcément par !#/bin/sh
-ce ficher doit avoir des droits en exécution pour se comporter "comme un programme", sinon ca reste un simple fichier txt. Pour le rendre exécutable, tu tapes dans une console chmod +x monfichier
Toutes les heures cron doit lancer un script qui :
-lit ton fichier contenant les ip
-les ping
-écrit les résultats ailleurs
Lire le fichier :
cat toto.txt : envoie le contenu du fichier ligne par ligne sur la sortie standard
Donc si tu testes dans une console un truc comme :
for i in `cat toto.txt` |
Tu verras toutes tes lignes précédées de ------>
En effet `cat toto.txt` représente "ce que renvoie" cat toto.txt, donc dans la boucle for la variable $i contient à chaque itération une ligne de toto.txt
Variante :
while read i |
Même résultat, read est nourri par le contenu de toto.txt (le < toto.txt dit en gros "cette commande recevra en entrée toto.txt) et $i contient à chaque itération une ligne de toto.txt
Pinger l'ip :
Si i contient l'adresse ip, on peut faire
ping "$i" |
En rajoutant quelques options parce que sinon de base ping dure indéfiniment
Récuperer le résultat de ping :
output=`ping "$i"` |
Comme avant, `"$i"`représente "ce que renvoie" ping "$i", on peut le mettre directement dans une variable (note : quand je mets un truc dans une variable je ne mets pas $ devant, d'où mon output=azeazezae ici. Par contre pour consulter le contenu de cette variable on utilise bien $output)
Si ce que renvoie ping est trop verbeux et que tu ne veux que le temps en ms, tu peux soit chercher dans le man de ping s'il existerait pas une option qui rend ping moins verbeux, soit filtrer un peu cette sortie pour garder ce que tu veux.
Pour filtrer (plusieurs possibilités) il faut se renseigner sur grep, sed, cut (un peu technique pour débuter)
Stocker le résultat :
echo "toto ping en : $variable secondes" >> resultats.txt
écrit toto ping en : 0.323 secondes à la dernière ligne de resultats.txt (si $variable contient 0.323 évidemment).
Donc en répétant l'opération on rajoute toujours à la fin du même fichier.
Bon courage
PS : et pour obtenir l'heure courante, tu peux utiliser la commande date
Marsh Posté le 21-12-2006 à 01:50:13
Merci pour vos réponses.
Pour réaliser ce que je veux faire jeme suis tourné vers fping.
Voici la commande que je lance:
fping -C3 -q -f /home/admin/IP.txt >> tdr.txt
Le problème est que cette commande n'ecrit rien dans le fichier text (a cause du commutateur q pour quiet).
Si je vire -q j'ai un fichier de la forme:
217.146.186.51 : [1], 84 bytes, 33.2 ms (33.1 avg, 0% loss)
209.85.129.99 : [2], 84 bytes, 22.9 ms (22.8 avg, 33% loss)
Par contre, dans tous les cas, à la fin de son execution, fping affiche des stats des temps de réponse sous la forme:
209.85.129.99 : 23.54 23.34 23.95 22.87 23.46
217.146.186.51 : 33.20 33.32 33.46 33.08 33.45
C'est exactement ce que je veux récuperer, mais impossible...
Vous avez une idée
Marsh Posté le 21-12-2006 à 12:02:32
Ben non, essai de recuperer dans un fichier text le retour de la commande suivante:
fping -C3 -q www.google.fr
Et tu sera surpris du résultat!
Marsh Posté le 21-12-2006 à 14:00:29
renaud-twingo a écrit : Ben non, essai de recuperer dans un fichier text le retour de la commande suivante: |
Un programme peut avoir 2 output :
- la sortie standard (stdout) où on met les messages
- l'erreur standard (stderr) où on met les erreurs
De base tout finit sur la console (en général il faut pouvoir tout lire, messages et erreurs).
La redirection > envoie la sortie standard (stdout) dans un fichier, mais uniquement la sortie standard.
Exemple :
ls un_fichier_qui_n'existe_pas > toto.txt |
Tu vois que le message d'erreur s'affiche quand même
Si tu veux récupérer l'erreur standard, tu peux faire
ls un_fichier_qui_n'existe_pas 2> toto.txt |
2> redirige le flot numéro 2 (stderr, l'erreur standard)
Marsh Posté le 23-12-2006 à 21:47:28
Ca marche!
Merci beaucoup Xavier_OM, je ne connaissais pas cette subtilité (novice que je suis)...
Marsh Posté le 20-12-2006 à 12:09:57
Gros débutant sous Linux, je suis en train de découvir les joies de Linux et plus précisement de Debian.
Pour mettre le pied à l'etrier, je souhaite réaliser un script mais je n'ai aucune idée sur la façon de procéder:
1ère étape:
J'ai un fichier texte (IP.txt) avec une liste d'IP publiques (séparées par un retour chariot) que je souhaite pinguer pendant 1 Minute toutes les heures sur une semaine et récupérer les temps de réponse dans un fichier texte (avec les heures d'execution)
2ème étape:
j'ai 3 fichiers, dont 2 fichiers texte, l'un contenant les IP (IP.txt), l'autre contenant des mots de passe (MDP.txt) et je souhaite uploader puis downloader le 3ème fichier (test.tar.gz) en SCP sur les machines qui sont dans IP.txt en utilisant un login toujours identique (ex.: test) et les mots de passe associés dans le fichier MDP.txt (séparées par un retour chariot). Le but est de récupérer les temps d'upload/download dans un fichier texte avec les heures d'execution.
J'imagine que ce genre de scripts permettant de qualifier un accès Internet distant doit exister, mais je n'ai pas trouvé grand chose...
Merci d'avance pour votre aide