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

22

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 pings le 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
Waza_Be
la source
@Zoredache Je ne peux pas installer de tels logiciels sur un ordinateur de contrôle de processus: dev.pulsed.net/wp/?p=31
Waza_Be
"win XP Professional" n'est pas DOS.
grawity

Réponses:

28

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 voir, j'ai remplacé le sleep commande avec timeout. C'est parce que sleep n'est pas toujours disponible sur certains systèmes alors que timeout est généralement.

Manquant sleep ou timeout commandes sur votre système? Ne vous inquiétez pas. Il suffit de remplacer timeout avec 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 immédiatement, nous pouvons l’utiliser pour imiter un retard d'exécution.

mekwall
la source
timeout n'est pas reconnu comme une commande interne ou externe
Waza_Be
@ Profete162, avez-vous la commande de veille alors? Si oui, remplacez simplement timeout avec sleep. Quelle version de Windows faites-vous cela?
mekwall
Idem pour dormir ... J'utilise Win XP Professional
Waza_Be
1
@ Profete162, vieille école! :) Je vais ajouter une méthode secondaire que vous pouvez utiliser lorsque ces commandes sont manquantes.
mekwall
0

Je sais que c'est une question Windows (et une vieille question), mais c'est peut-être 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 quel système vous êtes

Robert Heath
la source
1
peut-être dans cygwin .. cygwin vous permet d'utiliser bash dans Windows
barlop
0

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.

james
la source
1
Bienvenue sur Super User! C'est vraiment un commentaire et ne pas une réponse à la question initiale. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire sous son message - vous pouvez toujours commenter vos propres messages, et une fois que vous en avez suffisamment réputation vous serez en mesure de commenter n'importe quel post . Lisez s'il vous plaît Pourquoi ai-je besoin de 50 réputation pour commenter? Que puis-je faire à la place?
DavidPostill
0

La question n'est pas très claire. Apparemment, il n’ya aucune utilisation en 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 une multitude d'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 ...

dmitry
la source
0

Pour une solution one-liner, 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 avec google.com
  2. pour modifier l'intervalle changer le 3000 à 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 % avec %%
sparks
la source
0

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

À votre santé!

Sean Vikoren
la source
-1

Sur les systèmes Windows, nous pouvons utiliser la commande suivante pour envoyer une requête ping à un serveur après un intervalle spécifique.

ping xxx.xxx.xxx.xxx -w xxxx -n xx & gt; & gt; c: \ logfile.txt

où -w spécifie les intervalles en millisecondes, donc 1000 ~ 1 seconde = & gt; 3000 pour 3 secondes de retard -n spécifie le nombre de fois où ping enverra une requête au serveur à l'adresse xxx.xxx.xxx.xxx.

Praveer Verma
la source
14
-w spécifie simplement combien de temps il attendra une réponse, pas combien de temps il attendra pour un ping.
Scott Beeson
-1

Voici la commande windows que j'utilise pour envoyer une requête ping à une adresse IP donnée à un intervalle spécifié (10 secondes dans cet exemple):

ping -t <ip.address> -w 10000

-t dit ping en continu.

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

ping -t <ip.address> -w 60000

Profitez-en et bonne chance !!

Software_Programineer
la source
La question demandait comment écrire les informations dans un fichier. Pouvez-vous modifier votre réponse pour accomplir cela?
Ben N
16
Sous Windows, -w spécifie le temps maximum d'attente avant de considérer un ping "perdu", pas le temps entre pings.
wersimmon