ฉันจะทำการ ping ทุก ๆ X นาทีและตรวจสอบเวลาตอบสนองได้อย่างไร


26

ฉันกำลังทำงานใน บริษัท ใหญ่และเรามีปัญหาเรื่องเวลาในการตอบสนองอย่างรุนแรง สิ่งนี้เกิดขึ้นในระบบควบคุมกระบวนการและไม่สามารถยอมรับได้ (เปิดวาล์วบางครั้งใช้เวลา 2 นาทีก่อนเริ่มต้นคำสั่ง)

ฉันต้องการตรวจสอบอีกครั้งเมื่อทีมเครือข่ายแจ้งว่า "ทุกอย่างไม่เป็นไรบนเครือข่าย" ดังนั้นฉันต้องการสร้างวนรอบที่ pings เซิร์ฟเวอร์และเขียนผลลัพธ์ในไฟล์ข้อความ

ฉันไม่ใช่ผู้เชี่ยวชาญด้านชุดงาน แต่คุณคิดว่ารหัสนี้ถูกต้องหรือไม่

@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

"win XP Professional" ไม่ใช่ DOS
grawity

คำตอบ:


31

ดูดีสำหรับฉัน แต่ไม่จำเป็นต้องวนซ้ำถ้าคุณต้องการ ping IP อย่างต่อเนื่อง จากนั้นคุณสามารถทำได้เช่นนี้:

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

หากคุณต้องการ ping ทุก ๆ X นาทีให้ใช้การวนซ้ำ:

@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 ไปยังที่อยู่ในพื้นที่ของคุณและเนื่องจากมันจะตอบสนองทันทีเราจึงสามารถใช้มันเพื่อเลียนแบบความล่าช้าในการดำเนินการ


การหมดเวลาไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก
Waza_Be

@ Profete162 คุณมีคำสั่ง sleep หรือไม่? ถ้าเป็นเช่นนั้นเพียงแทนที่ด้วยtimeout sleepคุณใช้ Windows รุ่นใด
mekwall

เช่นเดียวกันสำหรับการนอนหลับ ... ฉันใช้ win XP Professional
Waza_Be

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.xxxด้วยgoogle.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 นี่เป็นสิ่งแรกที่เกิดขึ้นเมื่อฉันกำลังมองหาคำสั่งง่ายๆเพื่อรักษาปริมาณการใช้งานเครือข่ายบนแล็ปท็อปของฉัน อาจเป็นประโยชน์กับคนที่มองหาสิ่งที่คล้ายกัน

ในสคริปต์ทุบตี:

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

บรรทัดเดียวจาก ping google dns ทุก ๆ 30 วินาที:

ping -i 30 8.8.8.8 > logfile

ทำงานได้ใน OSX และ Linux ควรเป็นมาตรฐานที่ดี แต่ไม่ทราบว่าคุณใช้ระบบใดอยู่


1
บางทีใน cygwin .. cygwin ให้คุณใช้ bash ใน windows ได้
barlop

0

สวิตช์การหมดเวลาไม่เหมือนกับสิ่งที่คุณกำลังมองหาเป็นสวิตช์ 'รอ' การสลับการหมดเวลาด้วยคำสั่ง Windows ping จะบอกหน้าต่างคำสั่งว่าต้องรอนานแค่ไหนก่อนที่จะรับการตอบกลับไม่ใช่รอนานแค่ไหนก่อนที่จะส่งการตอบกลับ NEXT


1
ยินดีต้อนรับสู่ Super User! นี่เป็นความคิดเห็นจริงๆและไม่ใช่คำตอบสำหรับคำถามเดิม จะวิจารณ์หรือการร้องขอคำชี้แจงจากผู้เขียนแสดงความคิดเห็นด้านล่างโพสต์ของพวกเขา - คุณสามารถแสดงความคิดเห็นในโพสต์ของคุณเองและเมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใดโปรดอ่านทำไมฉันต้องมี 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 ดูเหมือนจะเป็นตัวเลือกที่ดีที่สุด ...


0

เมื่อขยายคำตอบโดยประกายไฟฉันใส่รหัสบรรทัดหนึ่งลงในไฟล์แบตช์พร้อมการแก้ไขบางอย่าง

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จะส่ง Ping ไปยัง MyDC01 ทุกๆ 10 วินาที


0

ถ้าคุณต้องการวางลงในหน้าต่างคำสั่งบน windows ...

(สำหรับ / l% a in () ทำ @for / f "tokens = *"% b in ('ping -w 1,000 -n 1 8.8.8.8 ^ | findstr "ปลายทางปลายทางที่ไม่รู้จักตอบคำขอ"') ทำ @echo% b & หมดเวลา 3> NUL)

มัน ping ทุก 3 วินาที ... จนกว่าคุณจะหยุดมัน

สิ่งนี้ดีกว่าเพราะคุณไม่จำเป็นต้องเขียนไฟล์บันทึก (ทำไมคุณต้องใช้ไฟล์บันทึก) เพียงแค่ไปที่หน้าต่างทันทีและมันให้ผลลัพธ์ที่ต้องการ "ทันที" :)

ถ้าด้วยเหตุผลบางอย่างคุณสามารถไพพ์ไปยังล็อกไฟล์โดยทำสิ่งนี้: (สำหรับ / l% a in () ทำ @for / f "tokens = *"% b ใน ('ping -w 1,000 -n 1 8.8 8.8 ^ | findstr "ปลายทางที่ไม่รู้จักตอบคำขอ" ') ทำ @echo% b & หมดเวลา 3> NUL)> file.txt

นอกจากนี้คุณสามารถปรับการหมดเวลาโดยเปลี่ยนค่าหลังจาก 'หมดเวลา' ในกรณีนี้ 3 วินาที ...

และคุณไม่ต้องบันทึกลงในไฟล์แบทช์ ... เพียงแค่คัดลอกและวางสตริงข้อความนี้จากข้อความนี้ที่เก็บไว้ในตำแหน่งคลาวด์ที่บันทึกไว้ .. หรือโฟลเดอร์คำสั่งที่คุณต้องการใช้ .. ฯลฯ


มีคำตอบสำหรับคำถามนี้อยู่แล้วหลายครั้งโปรดอธิบายว่าคำตอบของคุณดีกว่า / แตกต่างกันอย่างไร
MátéJuhász

-1

บนระบบที่ใช้ Windows เราสามารถใช้คำสั่งต่อไปนี้เพื่อ ping เซิร์ฟเวอร์หลังจากช่วงเวลาที่ระบุ

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

โดยที่ -w ระบุช่วงเวลาเป็นมิลลิวินาทีดังนั้น 1,000 ~ 1 วินาที => 3000 สำหรับความล่าช้า 3 วินาที -n ระบุจำนวนครั้งที่ ping จะส่งข้อความค้นหาไปยังเซิร์ฟเวอร์ที่ xxx.xxx.xxx.xxx


15
- เพียงระบุระยะเวลาที่จะรอการตอบกลับไม่ใช่ระยะเวลาที่รอการ ping
Devil's Advocate

-1

นี่คือคำสั่ง windows ที่ฉันใช้ในการ ping IP เฉพาะในช่วงเวลาที่ระบุ (10 วินาทีในตัวอย่างนี้):

ping -t <ip.address> -w 10000

-t พูดว่า ping อย่างต่อเนื่อง

-w พูดว่ารอนานก่อนที่จะ ping ต่อไป นี่คือตัวอย่างรอ 1 นาที:

ping -t <ip.address> -w 60000

สนุกและขอให้โชคดี !!


คำถามที่ถามวิธีการเขียนข้อมูลไปยังไฟล์ คุณสามารถแก้ไขคำตอบเพื่อให้บรรลุผลนั้นได้หรือไม่?
Ben N

16
บน Windows -wระบุเวลาสูงสุดที่จะรอก่อนที่จะพิจารณาการ ping "สูญหาย" ไม่ใช่เวลาระหว่างการ Ping
wersimmon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.