web-dev-qa-db-fra.com

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 graves problèmes de latence. Cela se produit dans un système de contrôle de processus et est inacceptable (l'ouverture d'une vanne prend parfois 2 minutes avant que la commande ne démarre)

Je veux vérifier si l’équipe réseau dit "tout va bien sur le réseau". Donc, je veux créer une boucle qui envoie une requête ping au serveur et écrit le résultat dans un fichier texte.

Je ne suis pas un expert en batch, 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
26
Waza_Be

Cela me semble bien, mais il n’est pas nécessaire de le boucler si vous voulez envoyer un ping à l’IP en permanence. Ensuite, vous pouvez 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 constater, j'ai remplacé la commande sleep par timeout. En effet, sleep n'est pas toujours disponible sur certains systèmes alors que timeout l'est généralement.

Manquant des 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 bidouillage fait simplement un ping avec votre adresse locale, et comme il répond instantanément, nous pouvons l’utiliser pour émuler un retard d’exécution.

31
mekwall

Pour une solution Windows, si vous souhaitez installer wtee.exe , les éléments suivants fonctionneront ( 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

À votre santé!

1
Sean Vikoren

Pour une solution monocouche, 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, remplacez 3000 par 60 (pendant 1 minutes) ou 10 (pendant 10 secondes)
  3. si vous devez mettre cette commande dans un fichier de commandes (.bat ou .cmd), assurez-vous de remplacer % par %%.
1
sparks

développant la réponse de Sparks ci-dessus, j’ai mis son code à une ligne dans un fichier de commandes 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é en tant que PingD.bat utilisez ce qui suit pour exécuter PingD [nom de l'ordinateur/IP] [délai entre les pings en secondes]

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

0
James Tew

Je sais que c'est une question Windows (et une vieille question), mais peut-être est-elle similaire à Linux et OSX. C'est la première chose qui a été soulevée lorsque je recherchais une commande simple pour conserver le trafic réseau sur mon ordinateur portable. 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

Une seule ligne ex pinging google dns toutes les 30sec:

ping -i 30 8.8.8.8 > logfile

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

0
Robert Heath

le commutateur de délai d'attente n'est pas le même que celui que vous recherchez en tant que commutateur "attente". Le commutateur de délai d'attente avec la commande ping Windows indique simplement à la fenêtre de commande le délai d'attente avant de recevoir la réponse, pas le délai d'attente avant l'envoi de la réponse NEXT.

0
james

La question n'est pas très claire. Apparemment, il n’est pas utile d’utiliser une boucle continue dans un fichier batch ajouté à un fichier. Surtout lorsque ce fichier de commandes est démarré par un événement externe répétitif ... sauf si vous souhaitez remplir l'espace disque ... ou lancer d'innombrables invites de commande et arrêter le système ...

Mon hypothèse est qu'il devrait y avoir une période de temps pour les tests et ensuite le lot devrait se terminer. Je suppose également qu’aujourd’hui, la plupart des systèmes Microsoft Windows sont équipés de Powershell, ce qui pourrait devenir 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>"

Cela peut être placé dans un fichier de commandes ou exécuté en tant que script PowerShell. Dans ce cas, supprimez 'PowerShell' et les guillemets doubles.

Reste que bash sous Windows semble être la meilleure option ...

0
dmitry