ping หลาย IP ที่ใช้ bash หรือไม่


17

ฉันมี 10 หมายเลข IP ที่ฉันต้อง ping ทุกวันเพื่อตรวจสอบฉันจะทำอย่างไรโดยใช้ BASH script เพื่อให้ฉันสามารถทำงานนั้นโดยอัตโนมัติโดยใช้ cron ฉันต้องการสคริปต์ BASH เท่านั้น

ขอขอบคุณ.


ด้านล่างคำตอบฉันได้กล่าวถึง IP ของ Google, yahoo, msn และอื่น ๆ ฉันได้ลองเอง การแทรก {} และไม่ทำงานที่นี่ระหว่าง IP เพื่อแยกพวกเขา หวังว่ามันจะช่วยใครซักคนในอนาคต ขอบคุณสำหรับการอ่าน.
rʒɑdʒɑ

คำตอบ:


18

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

10.12.13.14
172.15.48.3
192.168.45.54
...
48.114.78.227

คุณสามารถใช้สคริปต์นี้

#!/bin/bash
# Program name: pingall.sh
date
cat /path/to/list.txt |  while read output
do
    ping -c 1 "$output" > /dev/null
    if [ $? -eq 0 ]; then
    echo "node $output is up" 
    else
    echo "node $output is down"
    fi
done

หากต้องการอัพเดตสถานะการทำงานของโหนดของคุณในช่วงเวลา 30 นาทีที่ใช้ที่ crontab

*/30 * * * * /path/to/pingall.sh > /path/to/log.txt

ผลลัพธ์ของ log.txt

$ cat /path/to/log.txt
Fri Jan 31 15:06:01 IST 2014
node 10.12.13.14 is up
node 172.15.48.3 is up
node 192.168.45.54 is up
...
node 48.114.78.227 is down

ไม่ใช่สิ่งที่คุณคาดหวังใช่หรือไม่
souravc

ดูเหมือนว่าสิ่งที่ OP ควรมองหา .. และเนื่องจากเว็บไซต์อย่าง google.com, yahoo.com เป็นต้นใช้เซิร์ฟเวอร์หลายเครื่องเพื่อจัดการกับการร้องขอมันจะดีกว่าถ้าคุณปิงชื่อโดเมนของพวกเขา ต้องเปลี่ยน IP ใน ping-list ของคุณในสัปดาห์ที่จะมาถึง) ..
ความแม่นยำ

ใช้งานได้ดีฉันโพสต์คำตอบที่แก้ไขเล็กน้อยซึ่งฉันใช้ภายในสภาพแวดล้อม Travis CI
MitchellK


1

ตรวจสอบสคริปต์นี้

   #!/bin/bash
    for i in `seq ${2} ${3}`
    do
        ping -c 1 ${1}.${i} > /dev/null 2>&1
        if [ $? -eq 0 ]; then
            echo "${1}.${i} responded."
        else
            echo "${1}.${i} did not respond."
        fi
    done

หากต้องการรัน. /script 192.168.1 0 10 ตัวอย่างเช่นนี้จะทำการตรวจสอบ ips 192.168.1.0 ถึง 192.168.1.10 และ echo จะตอบสนองหาก ping นั้นโอเคและไม่ตอบสนองหากไม่ได้

หมายเหตุ: คุณสามารถแทนที่ $ 1 $ 2 $ 3 โดยตัวแปรคงที่หากช่วงและ IP ของเสมอเหมือนกัน


IP ไม่ได้อยู่ในช่วงเดียวกัน นั่นคือเกณฑ์ที่อยู่เบื้องหลัง ขอบคุณสำหรับคำตอบใด ๆ + 1
rɑːdʒɑ

ตกลงโปรดระบุว่าในคำถามของคุณ ขอบคุณสำหรับ +
Maythux

สคริปต์ที่เรียบง่ายและมีประโยชน์ซึ่งอาจมีประโยชน์มาก (เช่น: บนอุปกรณ์ฝังตัว) แม้ว่ามันจะไม่ได้ตอบคำถาม 100% ก็ตาม ขอบคุณ. สมควรได้รับ +1
Sopalajo de Arrierez

1

สมมติว่าคุณมี 5 IP (เพื่อลดคำตอบเท่านั้น) จากนั้นคุณสามารถ ping ได้

#!/usr/bin/bash    
for i in xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx xxx.xxx.xxx.xxxx 
do
ping -c 5 $i
done

หมายเหตุ: ไม่ใช่วงเล็บปีกกาไม่มีเครื่องหมายจุลภาค (,) ระหว่าง IP

หวังว่าจะช่วย

Ex:

[raja @ scripts]$ cat ping.sh
for i in 74.125.236.70  98.139.183.24  65.55.206.228  91.189.94.156 198.252.206.24
do
ping -c 5 $i 
done 
[raja @ scripts]$ ./ping.sh
PING 74.125.236.70 (74.125.236.70) 56(84) bytes of data.
64 bytes from 74.125.236.70: icmp_seq=1 ttl=128 time=11.5 ms
64 bytes from 74.125.236.70: icmp_seq=2 ttl=128 time=11.0 ms
64 bytes from 74.125.236.70: icmp_seq=3 ttl=128 time=10.9 ms
64 bytes from 74.125.236.70: icmp_seq=4 ttl=128 time=16.5 ms
64 bytes from 74.125.236.70: icmp_seq=5 ttl=128 time=18.2 ms

--- 74.125.236.70 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4025ms
rtt min/avg/max/mdev = 10.966/13.682/18.291/3.120 ms
PING 98.139.183.24 (98.139.183.24) 56(84) bytes of data.
64 bytes from 98.139.183.24: icmp_seq=1 ttl=128 time=244 ms
64 bytes from 98.139.183.24: icmp_seq=2 ttl=128 time=253 ms
64 bytes from 98.139.183.24: icmp_seq=3 ttl=128 time=255 ms
64 bytes from 98.139.183.24: icmp_seq=4 ttl=128 time=251 ms
64 bytes from 98.139.183.24: icmp_seq=5 ttl=128 time=243 ms

--- 98.139.183.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 243.511/249.623/255.275/4.674 ms
PING 65.55.206.228 (65.55.206.228) 56(84) bytes of data.
From 10.22.96.94 icmp_seq=5 Packet filtered

--- 65.55.206.228 ping statistics ---
5 packets transmitted, 0 received, +1 errors, 100% packet loss, time 14002ms

PING 91.189.94.156 (91.189.94.156) 56(84) bytes of data.
64 bytes from 91.189.94.156: icmp_seq=1 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=2 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=3 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=4 ttl=128 time=240 ms
64 bytes from 91.189.94.156: icmp_seq=5 ttl=128 time=240 ms

--- 91.189.94.156 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4242ms
rtt min/avg/max/mdev = 240.060/240.222/240.309/0.626 ms
PING 198.252.206.24 (198.252.206.24) 56(84) bytes of data.
64 bytes from 198.252.206.24: icmp_seq=1 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=2 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=3 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=4 ttl=128 time=237 ms
64 bytes from 198.252.206.24: icmp_seq=5 ttl=128 time=242 ms

--- 198.252.206.24 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4251ms
rtt min/avg/max/mdev = 237.600/238.575/242.291/1.933 ms

คุณไม่ได้แสดงการใช้งาน cron ตามที่กล่าวไว้ใน Q .. ของคุณและสคริปต์นั้นจะแจ้งผลการร้องขอ ping ได้อย่างไร
แม่นยำ

ฉันพูดถึงว่าฉันต้องการสคริปต์เท่านั้น Cron ไม่ได้เป็นส่วนหนึ่งของคำถาม Cron ได้พูดถึงสาเหตุที่ฉันต้องการสคริปต์นี้ & เพื่อพูดถึงวัตถุประสงค์ของสคริปต์นี้เพราะมันเป็นงาน cron
rʒɑdʒɑ

@hash ลองก่อนถามเพื่อนที่รักของฉันขอบคุณที่มองหา
rʒɑdʒɑ

ฉันไม่เคยบอกว่าสคริปต์จะไม่ทำงาน .. แต่เมื่อ Q ของคุณกล่าวถึงcronงานหมายถึงการแจ้งให้ผู้ใช้ทราบถึงผลลัพธ์ของงานที่จะต้องทำหรือคุณแนะนำอย่างอื่น?
แม่นยำ

วัตถุประสงค์ของฉันเป็นงาน cron ผมหมายถึงว่าทำไมฉันต้องทุบตีนี้ script.but ความต้องการของฉันคือทุบตี @hash
rɑːdʒɑ

1
echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1

หรือด้วย grep ให้ดูเฉพาะโหนด ping ที่ไม่ใช่เท่านั้น

echo 192.168.1.1 192.168.1.2 192.168.1.3 | xargs -n1 ping -w 1 | grep -b1 100

1

ดี

ง่ายเหมือนที่: ใช้parallel --gnuคำสั่งแล้วคำสั่งของคุณ

รับ IP ตัวอย่าง:

$ dig +trace google.com |ipx

127.0.0.1
127.0.0.1
199.7.91.13
199.7.91.13
192.48.79.30
192.48.79.30
173.194.33.161
173.194.33.165
173.194.33.163
173.194.33.164
173.194.33.174
173.194.33.160
173.194.33.167
173.194.33.166
173.194.33.162
173.194.33.169
173.194.33.168
216.239.32.10
216.239.32.10

$ parallel --gnu ping -c1 ::: `dig +trace google.com |ipx`
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.018 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.018/0.018/0.018/0.000 ms
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_req=1 ttl=64 time=0.017 ms

--- 127.0.0.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.017/0.017/0.017/0.000 ms
PING 173.194.33.132 (173.194.33.132) 56(84) bytes of data.
64 bytes from 173.194.33.132: icmp_req=1 ttl=54 time=20.5 ms

--- 173.194.33.132 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 20.526/20.526/20.526/0.000 ms
PING 173.194.33.131 (173.194.33.131) 56(84) bytes of data.
64 bytes from 173.194.33.131: icmp_req=1 ttl=54 time=20.7 ms
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.