Làm cách nào tôi có thể thực hiện ping mỗi X phút và kiểm tra thời gian phản hồi?


26

Tôi hiện đang làm việc trong một công ty lớn và chúng tôi có vấn đề về độ trễ nghiêm trọng. Điều này đang xảy ra trong một hệ thống kiểm soát quy trình và không thể chấp nhận được (Mở van đôi khi mất 2 phút trước khi bắt đầu lệnh)

Tôi muốn kiểm tra lại khi nhóm mạng nói rằng "mọi thứ đều ổn trên mạng". Vì vậy, tôi muốn tạo một vòng lặp ping máy chủ và ghi kết quả vào một tệp văn bản.

Tôi không phải là một chuyên gia hàng loạt, nhưng bạn có nghĩ rằng mã này là chính xác để sử dụng?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART


@Zoredache Tôi không thể cài đặt các phần mềm như vậy trên máy tính Điều khiển quy trình: dev.pulsed.net/wp/?p=31
Waza_Be

"win XP Professional" không phải là DOS.
grawity

Câu trả lời:


31

Có vẻ tốt đối với tôi, nhưng không cần phải lặp lại nếu bạn muốn liên tục ping IP. Sau đó, bạn có thể chỉ cần làm như thế này:

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

Nếu bạn muốn ping mỗi X phút, hãy sử dụng vòng lặp:

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

Như bạn thấy tôi đã thay thế sleeplệnh bằng timeout. Đó là bởi vì sleepkhông phải lúc nào cũng có sẵn trên một số hệ thống trong khi timeoutthông thường là vậy.

Thiếu sleephoặc timeoutlệnh trên hệ thống của bạn? Đừng băn khoăn. Chỉ cần thay thế timeoutbằng hack sau:

@ping 127.0.0.1 -n %INTERVAL% > nul

Hack này chỉ đơn giản là ping địa chỉ địa phương của bạn và vì nó sẽ phản hồi ngay lập tức nên chúng tôi có thể sử dụng điều này để mô phỏng sự chậm trễ trong thực thi.


thời gian chờ không được công nhận là lệnh nội bộ hoặc bên ngoài
Waza_Be

@ Profete162, bạn có lệnh ngủ không? Nếu vậy, chỉ cần thay thế timeoutbằng sleep. Phiên bản Windows nào bạn đang làm điều này?
mekwall

Tương tự cho giấc ngủ ... Tôi đang sử dụng win XP Professional
Waza_Be

1
@ Profete162, trường cũ! :) Tôi sẽ thêm một phương thức phụ mà bạn có thể sử dụng khi các lệnh đó bị thiếu.
mekwall

3

Đối với giải pháp một lớp lót, sử dụng như sau:

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"

Lưu ý:

  1. bạn có thể thay thế xxx.xxx.xxx.xxxbằnggoogle.com
  2. để chỉnh sửa khoảng thời gian thay đổi 3000thành 60(trong 1 phút) hoặc 10 (trong 10 giây)
  3. nếu bạn cần đặt lệnh này trong tệp bó (.bat hoặc .cmd), thì hãy đảm bảo bạn thay thế %bằng%%

1

Đối với giải pháp Windows, nếu bạn sẵn sàng cài đặt wtee.exe , cách sau sẽ hoạt động ( 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

Chúc mừng!


0

Tôi biết đó là một câu hỏi về cửa sổ (và một câu hỏi cũ), nhưng có lẽ nó tương tự như Linux và OSX. Đây là điều đầu tiên xuất hiện khi tôi đang tìm kiếm một lệnh đơn giản để giữ lưu lượng mạng trên máy tính xách tay của mình. Có thể hữu ích cho ai đó đang tìm kiếm một cái gì đó tương tự.

trong một tập lệnh bash:

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

Dòng duy nhất pelling google dns cứ sau 30 giây:

ping -i 30 8.8.8.8 > logfile

Hoạt động trong OSX và Linux, mặc dù khá chuẩn, không biết bạn đang sử dụng hệ thống nào.


1
có lẽ trong cygwin .. cygwin cho phép bạn sử dụng bash trong windows
barlop

0

công tắc hết thời gian không giống như công tắc bạn đang tìm kiếm như công tắc 'chờ'. Công tắc hết thời gian với lệnh ping Windows chỉ đơn giản là cho cửa sổ lệnh chờ bao lâu trước khi NHẬN trả lời, không phải đợi bao lâu trước khi gửi trả lời NEXT.


1
Chào mừng bạn đến với Siêu người dùng! Đây thực sự là một bình luận và không phải là một câu trả lời cho câu hỏi ban đầu. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào . Xin vui lòng đọc tại sao tôi cần 50 danh tiếng để bình luận? Tôi có thể làm gì thay thế?
DavidPostill

0

Câu hỏi không hoàn toàn rõ ràng. Rõ ràng không có việc sử dụng trong vòng lặp liên tục trong một tệp bó nối vào một tệp. Đặc biệt là khi tệp bó này được bắt đầu bằng một sự kiện bên ngoài lặp lại ... trừ khi bạn muốn lấp đầy không gian đĩa ... hoặc để khởi tạo hàng tấn dấu nhắc lệnh và bóp nghẹt hệ thống ...

Giả định của tôi là nên có một khoảng thời gian để thử nghiệm và sau đó lô sẽ kết thúc. Tôi cũng cho rằng ngày nay hầu hết các MS Windows đều được trang bị Powershell, có thể trở nên hữu ích cho trường hợp này. Đây là twoliner:

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

Điều này có thể được đặt trong một tệp bó hoặc chạy dưới dạng tập lệnh powershell, trong trường hợp này loại bỏ 'powershell' và dấu ngoặc kép.

Tuy nhiên, bash trên Windows dường như là lựa chọn tốt nhất ...


0

mở rộng câu trả lời của Sparks ở trên, tôi đặt mã một dòng của anh ấy vào một tệp bó với một số sửa đổi.

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"

được lưu dưới dạng PingD.bat sử dụng cách sau để thực thi PingD [tên máy / IP] [độ trễ giữa các lần ping trong vài giây]

ví dụ: PingD MyDC01 10 sẽ gửi ping đến MyDC01 cứ sau 10 giây.


0

Nếu bạn muốn dán nó vào cửa sổ lệnh trên windows ...

(for / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Trả lời Yêu cầu Điểm đến không xác định"') do @echo% b & thời gian chờ 3> NUL)

Nó ping cứ sau 3 giây ... cho đến khi bạn dừng lại

Điều này tốt hơn bởi vì bạn không cần phải ghi vào tệp nhật ký, (tại sao bạn thực sự cần một tệp nhật ký) chỉ vào cửa sổ ngay lập tức và nó mang lại cho bạn kết quả mong muốn "ngay lập tức" :)

Nếu vì một lý do nào đó, bạn cũng có thể chuyển sang tệp nhật ký bằng cách thực hiện việc này: (for / l% a in () do @for / f "tokens = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Trả lời yêu cầu Điểm đến không xác định" ') làm @echo% b & hết thời gian 3> NUL)> file.txt

Ngoài ra, bạn có thể điều chỉnh thời gian chờ bằng cách thay đổi giá trị sau 'thời gian chờ' như trong trường hợp này là 3 giây ...

Và bạn không phải lưu vào một tệp bó ... Chỉ cần sao chép và dán chuỗi văn bản này từ văn bản này được lưu trữ trong một vị trí đám mây đã lưu .. hoặc thư mục các lệnh bạn muốn sử dụng .. vv ..


Đã có một số câu trả lời cho câu hỏi này, xin vui lòng giải thích làm thế nào câu trả lời của bạn tốt hơn / khác nhau.
Máté Juhász

-1

Trên các hệ thống dựa trên Windows, chúng ta có thể sử dụng lệnh sau để ping máy chủ sau khoảng thời gian cụ thể

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

trong đó -w chỉ định các khoảng thời gian tính bằng mili giây nên 1000 ~ 1 giây => 3000 trong 3 giây chậm trễ -n chỉ định số lần ping sẽ gửi truy vấn đến máy chủ tại xxx.xxx.xxx.xxx.


15
-w chỉ xác định thời gian chờ đợi trả lời, không phải đợi bao lâu để ping.
Người ủng hộ của quỷ

-1

Đây là lệnh windows tôi sử dụng để ping một IP cụ thể tại một khoảng thời gian xác định (10 giây trong ví dụ này):

ping -t <ip.address> -w 10000

-t nói ping liên tục.

-w nói hãy đợi điều này thật lâu trước khi ping tiếp theo. Dưới đây là ví dụ chờ 1 phút:

ping -t <ip.address> -w 60000

Hãy tận hưởng, và chúc may mắn !!


Câu hỏi hỏi làm thế nào để viết thông tin vào một tập tin. Bạn có thể chỉnh sửa câu trả lời của bạn để thực hiện điều đó?
Ben N

16
Trên Windows, -wchỉ định thời gian chờ tối đa trước khi xem xét ping "bị mất", không phải thời gian giữa các lần ping.
wersimmon
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.