Eu tenho 10 números de IP que tenho que executar ping diariamente para verificar. Como posso fazer isso usando o script BASH. Para que eu possa automatizar essa tarefa usando cron. Quero apenas o script BASH.
Abaixo resposta, eu mencionei IP's do Google, Yahoo, MSN etc. Eu tentei isso sozinho. Inserir {} e, não está funcionando aqui entre IPs para separá-los. espero que ajude alguém no futuro. Obrigado pela leitura.
rɑːdʒɑ
Respostas:
18
Como seu intervalo de ips não tem simetria e existem apenas 10 nós, sugiro listá-los em um arquivo de texto. Estou considerando que o arquivo que contém a lista é o list.txtque contém a lista de ip um em cada linha, como mostrado abaixo,
isso parece exatamente o que o OP deveria procurar .. e como sites como google.com, yahoo.com etc. usam vários servidores para lidar com solicitações, seria melhor fazer ping deles com seus nomes de domínio (para que você possivelmente não tem que mudar o IP na sua lista de ping na próxima semana) ..
precisa
Funciona muito bem, publiquei uma resposta ligeiramente modificada que uso em um ambiente do 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
Para executar ./script 192.168.1 0 10, por exemplo, isso irá verificar os ips 192.168.1.0 a 192.168.1.10 e eco responderá se o ping estiver ok e não responder.
Nota: você pode substituir $ 1 $ 2 $ 3 por variáveis estáticas se o intervalo e os IPs forem sempre os mesmos.
IP não são da mesma faixa. esse é o critério por trás. de qualquer forma obrigado pela resposta. + 1
rɑːdʒɑ 31/01
ok, por favor, indique isso na sua pergunta. Obrigado por +
Maythux
Um script limpo e simples que pode ser muito útil (por exemplo: em dispositivos incorporados), mesmo quando não trata 100% das condições da pergunta. Te agradece. +1 merecido.
Sopalajo de Arrierez
1
Suponha que você possua 5 IPs (para reduzir apenas a resposta) e, em seguida, execute ping com eles.
#!/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
Nota: Não entre colchetes, sem vírgulas (,) entre IPs.
Espero que ajude.
Ex:
[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
você não mostrar a implementação com cron como mencionado em sua Q .. também como é que esse script notificar o resultado dos pedidos de ping ..
precisa
Eu mencionei que eu quero apenas script. Cron não faz parte da questão. Cron mencionou por que eu preciso desse script e para mencionar o objetivo desse script como um trabalho cron.
rɑːdʒɑ
@hash Experimente antes de perguntar ao meu querido amigo. Obrigado por procurar.
rɑːdʒɑ
Eu nunca disse que o script não funcionaria .. mas, como seu Q menciona o crontrabalho, seria necessário um meio de notificar o usuário do resultado do trabalho ou você sugere outra coisa?
precisa
meu propósito é o trabalho cron, eu quero dizer por que eu preciso disso BASH script.but minha exigência é o bash @hash
Respostas:
Como seu intervalo de ips não tem simetria e existem apenas 10 nós, sugiro listá-los em um arquivo de texto. Estou considerando que o arquivo que contém a lista é o
list.txt
que contém a lista de ip um em cada linha, como mostrado abaixo,Você pode usar esse script,
Para atualizar o status de execução dos nós em um intervalo de 30 minutos, use o crontab,
Saída do log.txt
fonte
$ cat host.txt
Consulte:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
fonte
Verifique este script.
Para executar ./script 192.168.1 0 10, por exemplo, isso irá verificar os ips 192.168.1.0 a 192.168.1.10 e eco responderá se o ping estiver ok e não responder.
Nota: você pode substituir $ 1 $ 2 $ 3 por variáveis estáticas se o intervalo e os IPs forem sempre os mesmos.
fonte
Suponha que você possua 5 IPs (para reduzir apenas a resposta) e, em seguida, execute ping com eles.
Nota: Não entre colchetes, sem vírgulas (,) entre IPs.
Espero que ajude.
Ex:
fonte
cron
trabalho, seria necessário um meio de notificar o usuário do resultado do trabalho ou você sugere outra coisa?ou com grep, veja apenas nós que não são ping
fonte
Bem
Simples assim: use
parallel --gnu
comando e depois o seu comando.Obtenha os IPs de exemplo:
fonte