web-dev-qa-db-ja.com

X分ごにpingを実行して応答時間を確認する方法を教えてください。

私は現在大企業で働いています、そして我々は深刻な待ち時間問題を抱えています。これはプロセス制御システムで発生しており、受け入れられません(Valveを開くとコマンド開始までに2分かかることがあります)。

私はネットワークチームが「すべてがネットワーク上で大丈夫だ」と言ったときに二重チェックしたいです。そのため、サーバーをpingして結果をテキストファイルに書き込むループを作成します。

私はバッチエキスパートではありませんが、このコードを使用するのは正しいと思いますか?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
26
Waza_Be

私には問題ないように見えますが、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は常にいくつかのシステムで利用できるわけではないからです。

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

@ping 127.0.0.1 -n %INTERVAL% > nul

このハックは単にあなたのローカルアドレスをpingします、そしてそれは即座に反応するのでそれをemulate実行の遅れに使うことができます。

31
mekwall

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

乾杯!

1
Sean Vikoren

ワンライナーソリューションの場合は、以下を使用してください。

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. xxx.xxx.xxx.xxxgoogle.comに置き換えることができます
  2. 間隔を編集するには、300060(1分間)または10(10秒間)に変更します。
  3. このコマンドをバッチファイル(.batまたは.cmd)に入れる必要がある場合は、必ず%%%に置き換えてください。
1
sparks

上記の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を実行します。[machine name/IP] [ping間の遅延(秒)]

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

0
James Tew

私はそれがwindowsの質問であることを知っています(そしてそれに関する古い質問)が、おそらくそれは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で動作しますが、かなり標準的であるべきです、あなたがどんなシステム上にいるのかわからないでください。

0
Robert Heath

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

0
james

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

私の考えでは、テストにはある程度の時間があるはずで、その後バッチは終了するはずです。また、今日のほとんどのMS WindowsにはPowershellが装備されていると思います。これが2つです。

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
dmitry