2011-10-11 07:02:21 +0000 2011-10-11 07:02:21 +0000
26
26

Comment puis-je effectuer un ping toutes les X minutes et vérifier le temps de réponse ?

Je travaille actuellement dans une grande entreprise et nous avons de sérieux problèmes de latence. Cela se produit dans un système de contrôle de processus, et c'est inacceptable (ouvrir une vanne prend parfois 2 minutes avant le début de la commande)

Je veux revérifier quand l'équipe réseau dit “tout va bien sur le réseau”. Donc, je veux créer une boucle qui pique le serveur et écrit le résultat dans un fichier texte.

Je ne suis pas un expert en lot, mais pensez-vous que ce code est correct à utiliser ?

@ECHO OFF

:LOOPSTART

time /T
ping xxx.xx.x.x -t >> filename.txt
sleep -m 3000

GOTO LOOPSTART

Réponses (10)

32
32
32
2011-10-11 07:14:25 +0000

Cela me semble bien, mais il n'est pas nécessaire de le mettre en boucle si vous voulez envoyer un ping en continu à l'IP. Vous pourriez alors simplement le faire comme ceci :

@ECHO OFF
set IPADDRESS=x.x.x.x
ping %IPADDRESS% -t >> filename.txt

Si vous voulez faire un ping toutes les X minutes, utilisez la boucle :

@ECHO OFF
set IPADDRESS=x.x.x.x
set INTERVAL=60
:PINGINTERVAL
ping %IPADDRESS% -n 1 >> filename.txt
timeout %INTERVAL%
GOTO PINGINTERVAL

Comme vous pouvez le voir, j'ai remplacé la commande sleep par timeout. C'est parce que sleep n'est pas toujours disponible sur certains systèmes alors que timeout l'est généralement.

Il manque les commandes sleep ou timeout sur votre système ? Ne vous inquiétez pas. Il suffit de remplacer timeout par le hack suivant :

@ping 127.0.0.1 -n %INTERVAL% > nul

Ce hack envoie simplement un ping à votre adresse locale, et comme il répondra instantanément, nous pouvons l'utiliser pour émuler un retard d'exécution.

3
3
3
2017-11-08 06:35:32 +0000

Pour une solution à une ligne, utilisez ce qui suit :

cmd /v /c "(for /l %a in () do @for /f "tokens=*" %b in ('ping -w 1000 -n 1 xxx.xxx.xxx.xxx ^| findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %b & timeout 3000 >NUL) > pingtestresults.txt"

NB :

  1. vous pouvez remplacer xxx.xxx.xxx.xxx par google.com
  2. pour modifier l'intervalle, changez le 3000 en 60 (pendant 1 minute) ou 10(pendant 10 secondes)
  3. si vous devez mettre cette commande dans un fichier batch (.bat ou .cmd), alors assurez-vous de remplacer % par %%.
1
1
1
2018-10-11 20:56:56 +0000

Pour une solution Windows, si vous êtes prêt à installer wtee.exe , ce qui suit fonctionnera pingloop.bat ) :

@echo off
SETLOCAL

set pingTarget=yahoo.com
set fileName=pinglog.txt
set waitSeconds=420

echo. | wtee -a %fileName%
echo ====================================================== | wtee -a %fileName%
echo Starting Ping Loop; Logging to %fileName% | wtee -a %fileName%

:timestamp
set day=%date:~7,2%
set month=%date:~4,2%
set year=%date:~10,4%

set timestamp=%year%-%month%-%day%_%time%
echo. | wtee -a %fileName%
echo ------------------------------------------------------ | wtee -a %fileName%
echo Ping Timestamp: %timestamp% | wtee -a %fileName%

:ping
ping %pingTarget% -n 1 | wtee -a %fileName%

:wait
ping 127.0.0.1 -n %waitSeconds% > nul

goto timestamp

ENDLOCAL

Santé !

0
0
0
2016-06-24 16:08:41 +0000

l'interrupteur de temporisation n'est pas le même que celui que vous recherchez comme interrupteur d'attente. Le commutateur de temporisation avec la commande ping de Windows indique simplement à la fenêtre de commande combien de temps il faut attendre avant de RECEVOIR la réponse, et non pas combien de temps il faut attendre avant d'envoyer la PROCHAINE réponse.

0
0
0
2019-03-08 10:08:28 +0000

Pour compléter la réponse de Sparks ci-dessus, j'ai mis son code d'une ligne dans un fichier de lots avec quelques modifications.

cmd /v /c "(for /l %%a in () do @for /f "tokens=*" %%b in ('ping -w 1000 -n 1 %1 ^| 
findstr "Reply Request Unknown Destination"') do @echo !DATE! !TIME! %%b & timeout %2 
>NUL) > pingtestresults.txt"

enregistré sous PingD.bat utilisez ce qui suit pour exécuter PingD [nom de la machine / IP] [délai entre les pings en secondes]

par exemple PingD MyDC01 10 enverra un ping à MyDC01 toutes les 10 secondes.

0
0
0
2019-10-30 02:52:47 +0000

Si vous voulez juste le coller dans une fenêtre de commande sur windows…

(for /l %a in () do @for /f “tokens=*” %b in (‘ping -w 1000 -n 1 8.8.8.8 ^| findstr “Reply Request Unknown Destination”’) do @echo %b & timeout 3 >NUL)

It ping’s every 3 seconds… jusqu'à ce que vous l'arrêtiez

C'est mieux parce que vous n'avez pas besoin d'écrire dans un fichier de log, (pourquoi auriez-vous vraiment besoin d'un fichier de log) juste dans la fenêtre immédiate et cela vous donne les résultats souhaités “immédiatement” :)

Si, pour une raison quelconque, vous pouvez également vous connecter au fichier journal en faisant ceci : (pour /l %a dans () do @for /f “tokens=*” %b dans (‘ping -w 1000 -n 1 8.8.8. 8 ^| findstr “Reply Request Unknown Destination”’) do @echo %b & timeout 3 >NUL)>file.txt

De plus, vous pouvez ajuster le timeout en changeant la valeur après le ‘timeout’ comme c'est le cas ici 3 secondes…

Et vous n'avez pas besoin d'enregistrer dans un fichier batch… Il suffit de copier et de coller cette chaîne de texte à partir de ce texte stocké dans un emplacement enregistré dans le nuage.. ou dans le dossier des commandes que vous aimez utiliser.. etc.

0
0
0
2014-07-18 07:35:10 +0000

Je sais que c'est une question de Windows (et une vieille question en plus), mais peut-être que c'est similaire à Linux et OSX. C'est la première chose qui est apparue quand j'ai cherché une commande simple pour garder le trafic réseau sur mon portable. Cela pourrait être utile à quelqu'un qui cherche quelque chose de similaire.

dans un script bash :

WAITSECONDS=30 #or whatever your needs are
IPTOPING=8.8.8.8 #or whatever your needs are
ping -i ${WAITSECONDS} ${IPTOPING} > logfile

Ligne unique ex pinging google dns every 30sec :

ping -i 30 8.8.8.8 > logfile

Fonctionne sous OSX et Linux, devrait être assez standard cependant, ne sait pas sur quel système vous êtes.

0
0
0
2017-01-13 17:25:07 +0000

La question n'est pas tout à fait claire. Apparemment, il n'y a aucune utilité à faire une boucle continue dans un fichier de lots annexé à un fichier. Surtout lorsque ce fichier est lancé par un événement externe répétitif… à moins de vouloir remplir l'espace disque… ou de lancer des tonnes d'invites de commande et d'étouffer le système…

Mon hypothèse est qu'il devrait y avoir une période de temps pour les tests et que le lot devrait se terminer. Je suppose aussi qu'aujourd'hui la plupart des MS Windows sont équipés de Powershell, ce qui pourrait être utile dans ce cas. Voici le twoliner :

powershell "get-date | out-file <log filename>"
powershell "test-connection <IP> -delay <interval> -count <how many pings> | out-file -append <log filename>"

Il peut être placé dans un fichier batch, ou exécuté comme un script powershell, dans ce cas, enlevez “powershell” et les guillemets.

Pourtant, bash sur Windows semble être la meilleure option…

-1
-1
-1
2015-04-27 17:57:18 +0000

Sur les systèmes basés sur Windows, nous pouvons utiliser la commande suivante pour envoyer un ping à un serveur après un intervalle spécifique

ping xxx.xxx.xxx.xxx.xxx -w xxxx -n xx >> c:\logfile.txt

où -w spécifie les intervalles en millisecondes donc 1000 ~ 1 seconde => 3000 pour un délai de 3 secondes -n spécifie le nombre de fois que le ping enverra une requête au serveur à xxx.xxx.xxx.xxx .

-1
-1
-1
2016-03-23 13:29:44 +0000

Voici la commande Windows que j'utilise pour envoyer un ping à un IP spécifique à un intervalle donné (10 secondes dans cet exemple) :

ping -t <ip.address> -w 10000

-t dit ping en continu.

-w dit d'attendre aussi longtemps avant le prochain ping. Voici un exemple d'attente d'une minute :

ping -t <ip.address> -w 60000

Enjoy, and Good Luck !