私は現在大企業で働いています、そして我々は深刻な待ち時間問題を抱えています。これはプロセス制御システムで発生しており、受け入れられません(Valveを開くとコマンド開始までに2分かかることがあります)。
私はネットワークチームが「すべてがネットワーク上で大丈夫だ」と言ったときに二重チェックしたいです。そのため、サーバーをpingして結果をテキストファイルに書き込むループを作成します。
私はバッチエキスパートではありませんが、このコードを使用するのは正しいと思いますか?
@ECHO OFF
:LOOPSTART
time /T
ping xxx.xx.x.x -t >> filename.txt
sleep -m 3000
GOTO LOOPSTART
私には問題ないように見えますが、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実行の遅れに使うことができます。
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
乾杯!
ワンライナーソリューションの場合は、以下を使用してください。
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:
xxx.xxx.xxx.xxx
をgoogle.com
に置き換えることができます3000
を60
(1分間)または10
(10秒間)に変更します。%
を%%
に置き換えてください。上記の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を送信します。
私はそれが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で動作しますが、かなり標準的であるべきです、あなたがどんなシステム上にいるのかわからないでください。
タイムアウトスイッチは、「待機」スイッチとして探しているものと同じではありません。 Windowsのpingコマンドによるtimeoutスイッチは、NEXT応答を送信するまでの待機時間ではなく、単に応答を受信するまでの待機時間をコマンドウィンドウに指示するだけです。
質問はあまり明確ではありません。明らかに、ファイルに追加するバッチファイルの連続ループでは意味がありません。特に、このバッチファイルが繰り返しの外部イベントによって起動された場合...ディスクスペースをいっぱいにしたい場合、または大量のコマンドプロンプトを起動してシステムを起動したい場合を除き、.
私の考えでは、テストにはある程度の時間があるはずで、その後バッチは終了するはずです。また、今日のほとんどの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は最良の選択肢のようです...