Bagaimana saya bisa melakukan ping setiap X menit dan memeriksa waktu respons?

26

Saat ini saya bekerja di perusahaan besar dan kami memiliki masalah latensi yang serius. Ini terjadi dalam sistem kontrol proses, dan tidak dapat diterima (Buka katup kadang-kadang membutuhkan waktu 2 menit sebelum perintah dimulai)

Saya ingin memeriksa ulang ketika tim jaringan mengatakan "semuanya baik-baik saja di jaringan". Jadi, saya ingin membuat loop yang ping server dan menulis hasilnya dalam file teks.

Saya bukan pakar batch, tetapi apakah Anda pikir kode ini benar untuk digunakan?

@ECHO OFF

:LOOPSTART

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

GOTO LOOPSTART
Waza_Be
sumber
@Zoredache Saya tidak bisa menginstal perangkat lunak seperti itu di komputer Proses kontrol: dev.pulsed.net/wp/?p=31
Waza_Be
"win XP Professional" bukan DOS.
grawity

Jawaban:

31

Terlihat bagus untuk saya, tetapi tidak perlu mengulanginya jika Anda ingin terus-menerus melakukan ping IP. Maka Anda bisa melakukannya seperti ini:

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

Jika Anda ingin melakukan ping setiap X menit, gunakan loop:

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

Seperti yang Anda lihat, saya mengganti sleepperintah dengan timeout. Itu karena sleeptidak selalu tersedia pada beberapa sistem sedangkan timeoutbiasanya.

Tidak ada sleepatau timeoutperintah pada sistem Anda? Jangan khawatir. Cukup ganti timeoutdengan retasan berikut:

@ping 127.0.0.1 -n %INTERVAL% > nul

Peretasan ini hanya mem-ping alamat lokal Anda, dan karena itu akan merespons secara instan, kami dapat menggunakannya untuk meniru keterlambatan dalam eksekusi.

mekwall
sumber
batas waktu tidak dikenali sebagai perintah internal atau eksternal
Waza_Be
@ Profete162, apakah Anda memiliki perintah tidur? Jika demikian, ganti saja timeoutdengan sleep. Versi Windows apa yang Anda lakukan ini?
mekwall
Sama untuk tidur ... Saya menggunakan win XP Professional
Waza_Be
1
@ Profete162, sekolah tua! :) Saya akan menambahkan metode sekunder yang dapat Anda gunakan ketika perintah-perintah itu hilang.
mekwall
3

Untuk solusi satu-liner gunakan yang berikut ini:

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. Anda bisa menggantinya xxx.xxx.xxx.xxxdengangoogle.com
  2. untuk mengedit interval, ubah 3000ke 60(selama 1 menit) atau 10 (selama 10 detik)
  3. jika Anda perlu menempatkan perintah ini dalam file batch (.bat atau .cmd), maka pastikan Anda menggantinya %dengan%%
bunga api
sumber
1

Untuk solusi Windows, jika Anda ingin menginstal wtee.exe , yang berikut ini akan berfungsi ( 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

Tepuk tangan!

Sean Vikoren
sumber
0

Saya tahu ini adalah pertanyaan windows (dan yang lama), tapi mungkin mirip dengan Linux dan OSX. Ini adalah hal pertama yang muncul ketika saya sedang mencari perintah sederhana untuk menjaga lalu lintas jaringan di laptop saya. Mungkin bermanfaat bagi seseorang yang mencari sesuatu yang serupa.

dalam skrip bash:

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

Satu baris dari ping google dns setiap 30 detik:

ping -i 30 8.8.8.8 > logfile

Bekerja di OSX dan Linux, seharusnya cukup standar, tidak tahu sistem apa yang Anda gunakan.

Robert Heath
sumber
1
mungkin di cygwin .. cygwin memungkinkan Anda menggunakan bash di windows
barlop
0

saklar batas waktu tidak sama dengan apa yang Anda cari sebagai saklar 'tunggu'. Sakelar batas waktu dengan perintah ping Windows hanya memberi tahu jendela perintah berapa lama untuk menunggu sebelum MENERIMA balasan, bukan berapa lama menunggu sebelum mengirim balasan BERIKUTNYA.

james
sumber
1
Selamat Datang di Pengguna Super! Ini benar-benar komentar dan bukan jawaban untuk pertanyaan awal. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan setelah Anda memiliki reputasi yang cukup Anda akan dapat mengomentari posting apa pun . Harap baca Mengapa saya perlu 50 reputasi untuk berkomentar? Apa yang bisa saya lakukan?
DavidPostill
0

Pertanyaannya tidak begitu jelas. Tampaknya tidak ada penggunaan dalam loop kontinu dalam file batch yang ditambahkan ke file. Terutama ketika file batch ini dimulai dengan peristiwa eksternal berulang ... kecuali jika Anda ingin mengisi ruang disk ... atau untuk memulai banyak perintah meminta dan mencekik sistem ...

Asumsi saya adalah harus ada jangka waktu untuk pengujian dan kemudian batch harus berakhir. Saya juga berasumsi bahwa hari ini sebagian besar MS Windows dilengkapi dengan Powershell, yang mungkin berguna untuk kasus ini. Ini adalah twoliner:

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

Ini bisa dimasukkan ke dalam file batch, atau dijalankan sebagai skrip PowerShell, dalam hal ini hapus 'PowerShell' dan tanda kutip ganda.

Namun, bash di Windows tampaknya menjadi pilihan terbaik ...

dmitry
sumber
0

memperluas jawaban Sparks di atas, saya memasukkan satu baris kode dalam file batch dengan beberapa modifikasi.

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"

disimpan sebagai PingD.bat gunakan yang berikut ini untuk menjalankan PingD [nama mesin / IP] [penundaan antar ping dalam hitungan detik]

mis. PingD MyDC01 10 akan mengirim ping ke MyDC01 setiap 10 detik.

James Tew
sumber
0

Jika Anda ingin menempelkannya ke jendela perintah di windows ...

(untuk / l% a in () do @for / f "token = *"% b in ('ping -w 1000 -n 1 8.8.8.8 ^ | findstr "Jawab Permintaan Destinasi Tidak Dikenal"') do @echo% b & batas waktu 3> NUL)

Ini ping setiap 3 detik ... sampai Anda menghentikannya

Ini lebih baik karena Anda tidak perlu menulis ke file log, (mengapa Anda benar-benar membutuhkan file log) hanya ke jendela langsung dan itu memberi Anda hasil yang diinginkan "segera" :)

Jika karena alasan tertentu Anda juga dapat melakukan pipe ke log-file dengan melakukan ini: (untuk / l% a in () do @for / f "token = *"% b in ('ping -w 1000 -n 1 8.8. 8.8 ^ | findstr "Balas Permintaan Destinasi Tidak Dikenal" ') lakukan @echo% b & waktu habis 3> NUL)> file.txt

Anda juga dapat menyesuaikan batas waktu dengan mengubah nilai setelah 'batas waktu' seperti dalam kasus ini 3 detik ...

Dan Anda tidak harus menyimpan ke file batch ... Cukup salin dan tempel string teks ini dari teks ini yang disimpan di lokasi cloud yang disimpan .. atau folder perintah yang ingin Anda gunakan .. dll.

CA Martin
sumber
Sudah ada beberapa jawaban untuk pertanyaan ini, mohon jelaskan juga bagaimana jawaban Anda lebih baik / berbeda.
Máté Juhász
-1

Pada sistem berbasis Windows kita dapat menggunakan perintah berikut untuk melakukan ping server setelah interval tertentu

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

di mana -w menentukan interval dalam milidetik sehingga 1000 ~ 1 detik => 3000 selama 3 detik tunda -n menentukan berapa kali ping akan mengirimkan permintaan ke server di xxx.xxx.xxx.xxx.

Praveer Verma
sumber
15
-w hanya menentukan berapa lama akan menunggu balasan, bukan berapa lama akan menunggu untuk ping.
Pengacara Setan
-1

Ini adalah perintah windows yang saya gunakan untuk melakukan ping IP tertentu pada interval yang ditentukan (10 detik dalam contoh ini):

ping -t <ip.address> -w 10000

-t kata ping terus menerus.

-w mengatakan tunggu selama ini sebelum ping berikutnya. Berikut adalah contoh menunggu 1 menit:

ping -t <ip.address> -w 60000

Nikmati, dan Semoga Sukses !!

Software_Programineer
sumber
Pertanyaannya adalah bagaimana cara menulis informasi ke file. Bisakah Anda mengedit jawaban Anda untuk mencapai itu?
Ben N
16
Pada Windows, -wtentukan waktu maksimum untuk menunggu sebelum mempertimbangkan ping "hilang", bukan waktu di antara ping.
wersimmon