У меня есть 10 IP-номеров, которые я должен пинговать ежедневно, чтобы проверить, как я могу это сделать, используя скрипт BASH. Так что я могу автоматизировать эту задачу с помощью cron. Я хочу только BASH-скрипт.
Спасибо.
У меня есть 10 IP-номеров, которые я должен пинговать ежедневно, чтобы проверить, как я могу это сделать, используя скрипт BASH. Так что я могу автоматизировать эту задачу с помощью cron. Я хочу только BASH-скрипт.
Спасибо.
Ответы:
Поскольку ваш диапазон 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
#!/bin/bash
while read hostname
do
ping -c 1 -t 1 "$hostname" > /dev/null 2>&1 &&
echo "Ping Status of $hostname : Success" ||
echo "Ping Status of $hostname : Failed"
done < host.txt
$ cat host.txt
host1.example.com
192.168.0.123
8.8.8.8
...
...
google.com
Смотрите:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
Проверьте этот скрипт.
#!/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 в порядке, и не отвечает, если нет.
NB. Вы можете заменить $ 1 $ 2 $ 3 статическими переменными, если диапазон и IP-адреса всегда одинаковы.
Предположим, что у вас есть 5 IP (только для уменьшения ответа), тогда вы можете пропинговать их с помощью
#!/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.
Надеюсь, это поможет.
Пример:
[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 , необходимо будет уведомить пользователя о результате выполнения задания, или вы предлагаете что-то еще?
Что ж
Все просто: используйте 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