X分ごとにpingを実行し、応答時間を確認するにはどうすればよいですか?


26

私は現在大企業で働いており、深刻な遅延の問題があります。これはプロセス制御システムで発生しており、受け入れられません(コマンドを開始する前にバルブを開くのに2分かかることがあります)

ネットワークチームが「すべてがネットワーク上で問題ない」と言ったときに、再確認したいと思います。そのため、サーバーにpingを実行し、結果をテキストファイルに書き込むループを作成します。

私はバッチの専門家ではありませんが、このコードの使用は正しいと思いますか?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART


@Zoredacheプロセス制御コンピューターにそのようなソフトウェアをインストールできません:dev.pulsed.net/wp/
p=

「win XP Professional」はDOSではありません。
悲しみ

回答:


31

私には問題ありませんが、IPを継続的にpingしたい場合、ループする必要はありません。次に、次のように単純に行うことができます。

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

X分ごとにpingを実行する場合は、ループを使用します。

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

ご覧のとおり、sleepコマンドをに置き換えましたtimeout。これsleepは、一部のシステムでは常に利用できるとは限らないが、timeout通常利用可能であるためです。

システムにコマンドがありませんsleeptimeout?心配しないでください。timeout次のハックに置き換えるだけです:

@ping 127.0.0.1 -n %INTERVAL% > nul

このハックは単にローカルアドレスにpingを送信するだけで、即座に応答するため、これを使用して実行の遅延をエミュレートできます。


タイムアウトは、内部または外部コマンドとして認識されない
Waza_Be

@ Profete162、それではsleepコマンドはありますか?その場合は、単にに置き換えtimeoutてくださいsleep。これを実行しているWindowsのバージョンは何ですか?
mekwall

睡眠のための同じ...私は勝利XP Professionalを使用しています
Waza_Be

1
@ Profete162、古い学校!:)これらのコマンドがない場合に使用できる2番目のメソッドを追加します。
mekwall

3

ワンライナーソリューションの場合は、次を使用します。

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"

注意:

  1. あなたは置き換えることができxxx.xxx.xxx.xxxgoogle.com
  2. 間隔を編集するには300060(1分間)または10 (10秒間)に変更します
  3. バッチファイル(.BATまたは.CMD)でこのコマンドを置く必要がある場合は、必ず交換してください作る%%%

1

Windowsソリューションの場合、wtee.exeをインストールする場合は、以下が機能します(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

乾杯!


0

私はそれがウィンドウズの質問であることを知っています(そして、それは古い質問です)が、おそらくLinuxとOSXに似ています。これは、ラップトップでネットワークトラフィックを維持する簡単なコマンドを探していたときに最初に出てきたものです。同様の何かを探している人に役立つかもしれません。

bashスクリプトで:

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

30秒ごとにgoogle dnsをpingする単一行:

ping -i 30 8.8.8.8 > logfile

OSXとLinuxで動作しますが、かなり標準的なはずですが、どのシステムを使用しているかはわかりません。


1
多分cygwin .. cygwinでは、ウィンドウでbashを使用できます
-barlop

0

タイムアウトスイッチは、「待機」スイッチとして探しているものとは異なります。Windows pingコマンドのタイムアウトスイッチは、次の応答を送信する前に待機する時間ではなく、応答を受信する前に待機する時間をコマンドウィンドウに指示するだけです。


1
スーパーユーザーへようこそ!これは実際にはコメントであり、元の質問に対する答えではありません。投稿者に批評または説明を依頼するには、投稿の下にコメントを残します-自分の投稿にいつでもコメントできます。評価が十分になったら、投稿にコメントできます。コメントするのに50の評判が必要な理由を
DavidPostill

0

問題は明確ではありません。どうやら、ファイルに追加するバッチファイルの連続ループでは使用できません。特に、このバッチファイルが繰り返しの外部イベントによって開始された場合...ディスクスペースをいっぱいにしたい場合、または大量のコマンドプロンプトを開始してシステムを停止したい場合を除き...

私の想定では、テストのための期間があるはずであり、その後バッチは終了するはずです。また、今日ではほとんどのMS WindowsにPowershellが搭載されていると想定しています。Powershellはこの場合に役立つ可能性があります。これがツーライナーです。

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

これはバッチファイルに入れるか、PowerShellスクリプトとして実行できます。この場合、「PowerShell」と二重引用符を削除します。

それでも、Windowsでのbashは最適なオプションのようです...


0

上記のSparksの答えを拡張して、彼の1行のコードをいくつかの修正を加えたバッチファイルに入れました。

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"

PingD.batとして保存すると、次を使用してPingD [マシン名/ IP] [ping間の遅延を数秒で実行]

たとえば、PingD MyDC01 10は10秒ごとにMyDC01にpingを送信します。


0

Windowsのコマンドウィンドウに貼り付けるだけの場合...

(/ 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 &タイムアウト3> NUL)

pingが3秒ごとに...停止するまで

これは、イミディエイトウィンドウにのみログファイルに書き込む必要がないため(ログファイルが本当に必要な理由)、望ましい結果を "すぐに"得るためです。

何らかの理由でこれを行うことでログファイルにパイプアウトすることもできます:(for / l%a in()do @for / f "tokens = *"%b in( 'ping -w 1000 -n 1 8.8。 8.8 ^ | findstr "不明な宛先への応答要求" ')do @echo%b&timeout 3> NUL)> file.txt

また、「timeout」の後に値を変更することでタイムアウトを調整できます。この場合は3秒です...

バッチファイルに保存する必要はありません...保存されたクラウドの場所に保存されたこのテキストからこのテキスト文字列をコピーして貼り付けます。


この質問にはすでにいくつかの答えがあります。あなたの答えがどのように優れている/異なるかについても説明してください。
マテ・ユハス

-1

Windowsベースのシステムでは、特定の間隔の後に次のコマンドを使用してサーバーにpingを実行できます

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

-wはミリ秒単位の間隔を指定するため、3秒の遅延で1000〜1秒=> 3000 -nはpingがxxx.xxx.xxx.xxxのサーバーにクエリを送信する回数を指定します。


15
-wは、pingを待機する時間ではなく、応答を待機する時間を指定するだけです。
悪魔の擁護者

-1

これは、指定した間隔(この例では10秒)で特定のIPをpingするために使用するwindowsコマンドです。

ping -t <ip.address> -w 10000

-tはpingを継続的に言います。

-wは、次のpingの前にこれだけ待つことを示します。1分間待機する例を次に示します。

ping -t <ip.address> -w 60000

楽しんで、そして幸運を!


質問は、情報をファイルに書き込む方法を尋ねました。それを達成するために答えを編集できますか?
ベンN

16
Windowsでは、ping -wの時間ではなく、pingが「失われた」と見なすまでの最大待機時間を指定します。
wersimmon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.