如何每隔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=31
Waza_Be 2011年

“ win XP Professional”不是DOS。
grawity

Answers:


31

对我来说看起来不错,但是如果您要连续ping IP,则无需循环。然后,您可以像这样简单地做到这一点:

@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为以下hack:

@ping 127.0.0.1 -n %INTERVAL% > nul

此hack只是对您的本地地址执行ping操作,并且由于它会立即响应,因此我们可以使用它来模拟执行延迟。


超时未被识别为内部或外部命令
Waza_Be 2011年

@ Profete162,那么您有睡眠命令吗?如果是这样,只需替换timeoutsleep。您正在执行什么版本的Windows?
mekwall

睡觉也一样...我正在使用Win XP Professional
Waza_Be,2011年

1
@ Profete162,老学校!:)我将添加一个辅助方法,当这些命令丢失时可以使用。
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. 编辑间隔,将更3000改为60(持续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

我知道这是一个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上运行,但是应该很标准,不知道您使用的是什么系统。


1
cygwin .. cygwin使您可以在Windows中使用bash
barlop 2015年

0

超时开关与您作为“等待”开关所需的开关不同。使用Windows ping命令的超时切换仅告诉命令窗口在接收答复之前要等待多长时间,而不是在发送NEXT答复之前要等待多长时间。


1
欢迎来到超级用户!这实际上是评论,而不是原始问题的答案。要批评或要求作者澄清,请在其帖子下方发表评论-您可以随时对自己的帖子发表评论,一旦您拥有足够的声誉,就可以在任何帖子中发表评论。请阅读为什么我需要50个信誉才能发表评论?我该怎么办?
DavidPostill

0

问题不是很清楚。显然,批处理文件中附加到文件的连续循环没有用。特别是当此批处理文件由重复的外部事件启动时...除非您想填满磁盘空间...或启动大量命令提示符并阻塞系统...

我的假设是应该有一段时间进行测试,然后批次应该结束。我还假定今天大多数MS Windows都装有Powershell,在这种情况下这可能会很有用。这是twoliner:

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的答案后,我将他的一行代码进行了一些修改后放入了批处理文件中。

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()执行@for / f“ tokens = *”%b in('ping -w 1000 -n 1 8.8.8.8 ^ | findstr“回复请求未知目标”')执行@echo%b和超时3> NUL)

每3秒ping一次...直到停止

这样比较好,因为您不需要直接在立即窗口中写入日志文件(为什么真正需要日志文件),它就可以“立即”提供所需的结果:)

如果出于某种原因,您还可以通过以下方式将其传送到日志文件:(对于/ l%a in(),请执行@for / f“ tokens = *”%b in('ping -w 1000 -n 1 8.8。 8.8 ^ | findstr“回复请求未知目的地”')执行@echo%b&超时3> NUL)> file.txt

另外,您可以通过更改“超时”后的值来调整超时,在这种情况下为3秒...

而且您不必保存到批处理文件中...只需从存储在云存储位置的文本中复制并粘贴此文本字符串即可。


该问题已经有多个答案,请也解释您的答案更好/不同的地方。
队友Juhász

-1

在基于Windows的系统上,我们可以使用以下命令在特定间隔后对服务器进行ping操作

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

其中-w指定间隔(以毫秒为单位),因此1000〜1秒=> 3000持续3秒钟-n指定ping将向xxx.xxx.xxx.xxx的服务器发送查询的次数。


15
-w仅指定等待回复的时间,而不是等待ping的时间。
魔鬼的代言人

-1

这是Windows命令,用于以指定的时间间隔(在此示例中为10秒)ping特定IP:

ping -t <ip.address> -w 10000

-t连续ping。

-w表示要等很久才能下次ping通。这是一个1分钟的等待示例:

ping -t <ip.address> -w 60000

享受,祝你好运!


问题询问如何将信息写入文件。您可以编辑答案来实现这一点吗?
本N

16
在Windows上,-w指定考虑ping“丢失”之前要等待的最长时间,而不是两次ping 之间的时间。
wersimmon
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.