У меня есть 10 IP-номеров, которые я должен пинговать ежедневно, чтобы проверить, как я могу это сделать, используя скрипт BASH. Так что я могу автоматизировать эту задачу с помощью cron. Я хочу только BASH-скрипт.
Ниже ответ я упомянул IP-адреса Google, Yahoo, MSN и т. Д. Я попробовал это сам. Вставка {} и, не работают здесь между IP, чтобы разделить их. надеюсь, что это может помочь кому-то в будущем. Спасибо за чтение.
rɑːdʒɑ
Ответы:
18
Поскольку ваш диапазон ip не имеет симметрии и в нем всего 10 узлов, я бы посоветовал перечислить их в текстовом файле. Я рассматриваю файл, содержащий список, list.txtкоторый содержит список ip один в каждой строке, как показано ниже,
Похоже, это именно то, что OP должен искать ... и поскольку такие сайты, как google.com, yahoo.com и т. д. используют несколько серверов для обработки запросов, было бы лучше пропинговать их своими доменными именами (так что вы, возможно, не будете мне нужно сменить IP в вашем пинг-листе на следующей неделе) ..
точно
Прекрасно работает, я разместил слегка измененный ответ, который я использую в среде Travis CI.
MitchellK
2
#!/bin/bashwhile 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
#!/bin/bashfor i in`seq ${2} ${3}`do
ping -c 1 ${1}.${i}>/dev/null 2>&1if[ $?-eq 0];then
echo "${1}.${i} responded."else
echo "${1}.${i} did not respond."fidone
Например, чтобы запустить ./script 192.168.1 0 10, он будет проверять ips с 192.168.1.0 до 192.168.1.10, и echo отвечает, если ping в порядке, и не отвечает, если нет.
NB. Вы можете заменить $ 1 $ 2 $ 3 статическими переменными, если диапазон и IP-адреса всегда одинаковы.
IP не из того же диапазона. вот критерии позади. В любом случае, спасибо за ответ. + 1
rʒɑdʒɑ
хорошо, пожалуйста, укажите это в своем вопросе. Спасибо за +
Maythux
Аккуратный и простой скрипт, который может быть очень полезен (например, на встроенных устройствах), даже если он не соответствует 100% условиям вопроса. Спасибо вам. +1 заслуженно.
Сопалахо де Арриерес
1
Предположим, что у вас есть 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 in74.125.236.7098.139.183.2465.55.206.22891.189.94.156198.252.206.24do
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.From10.22.96.94 icmp_seq=5Packet 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.
rɑːdʒɑ
@hash Попробуй, прежде чем спросить моего дорогого друга. Спасибо за поиск.
rɑːdʒɑ
Я никогда не говорил, что сценарий не будет работать ... но, как упоминается в вашем cronзадании Q , необходимо будет уведомить пользователя о результате выполнения задания, или вы предлагаете что-то еще?
Точно
моя цель - работа cron, я имею в виду, зачем мне этот скрипт BASH. но мое требование - bash @hash
Ответы:
Поскольку ваш диапазон ip не имеет симметрии и в нем всего 10 узлов, я бы посоветовал перечислить их в текстовом файле. Я рассматриваю файл, содержащий список,
list.txt
который содержит список ip один в каждой строке, как показано ниже,Вы можете использовать этот скрипт,
Чтобы обновить текущее состояние ваших узлов с интервалом в 30 минут, используйте crontab,
Вывод log.txt
источник
$ cat host.txt
Смотрите:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
источник
Проверьте этот скрипт.
Например, чтобы запустить ./script 192.168.1 0 10, он будет проверять ips с 192.168.1.0 до 192.168.1.10, и echo отвечает, если ping в порядке, и не отвечает, если нет.
NB. Вы можете заменить $ 1 $ 2 $ 3 статическими переменными, если диапазон и IP-адреса всегда одинаковы.
источник
Предположим, что у вас есть 5 IP (только для уменьшения ответа), тогда вы можете пропинговать их с помощью
Примечание: не скручивать скобки, без запятых (,) между IP.
Надеюсь, это поможет.
Пример:
источник
cron
задании Q , необходимо будет уведомить пользователя о результате выполнения задания, или вы предлагаете что-то еще?или с помощью grep, видеть только не пингующие узлы
источник
Что ж
Все просто: используйте
parallel --gnu
команду, а затем свою команду.Получите примеры IP:
источник