Tengo 10 números de IP que tengo que hacer ping diariamente para verificar, cómo puedo hacer eso usando el script BASH. Para poder automatizar esa tarea usando cron. Solo quiero script BASH.
A continuación, he mencionado las IP de Google, Yahoo, MSN, etc. Lo he intentado yo mismo. Insertar {} y, no funciona aquí entre las IP para separarlas. Espero que pueda ayudar a alguien en el futuro. Gracias por leer.
rɑːdʒɑ
Respuestas:
18
Como su rango de ip no tiene simetría y solo hay 10 nodos, sugeriría que los enumere en un archivo de texto. Estoy considerando que el archivo que contiene la lista es el list.txtque contiene la lista de ip uno en cada línea como se muestra a continuación,
esto parece exactamente lo que OP debería estar buscando ... y dado que los sitios web como google.com, yahoo.com, etc. utilizan múltiples servidores para manejar solicitudes, sería mejor hacer ping con sus nombres de dominio (para que posiblemente no lo haga) tiene que cambiar la IP en su lista de ping la próxima semana) ..
precisa
Funciona muy bien, publiqué una respuesta ligeramente modificada que uso dentro de un entorno 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 ejecutar ./script 192.168.1 0 10, por ejemplo, esto comprueba los ips 192.168.1.0 a 192.168.1.10 y echo respondió si ping está bien y no respondió si no.
NB: puede reemplazar $ 1 $ 2 $ 3 por variables estáticas si el rango y las IP son siempre iguales.
IP no son del mismo rango. Ese es el criterio detrás. de todos modos, gracias por la respuesta. + 1
rɑːdʒɑ
ok, por favor dilo en tu pregunta. Gracias por +
Maythux
Un script simple y ordenado que podría ser muy útil (es decir, en dispositivos integrados), incluso cuando no aborda el 100% de las condiciones de la pregunta. Gracias. +1 merecido.
Sopalajo de Arrierez
1
Suponga que tiene 5 IP (para reducir solo la respuesta), luego puede hacer ping con
#!/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: No se incluyen corchetes, sin comas (,) entre las IP.
Espero que ayude.
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
no mostró la implementación con cron como se menciona en su Q .. también cómo notificaría ese script el resultado de las solicitudes de ping ...
preciso
Mencioné que solo quiero guión. Cron no es parte de la pregunta. Cron mencionó por qué necesito este script y mencionar el propósito de este script como un trabajo cron.
rɑːdʒɑ
@hash Pruébalo antes de preguntarle a mi querido amigo. Gracias por mirar.
rɑːdʒɑ
Nunca dije que el script no funcionaría ... pero como su Q menciona el crontrabajo, sería necesario un medio para notificar al usuario el resultado del trabajo, o sugiere algo más?
precisa
mi propósito es cron job, quiero decir por qué necesito este script BASH. pero mi requisito es bash @hash
Respuestas:
Como su rango de ip no tiene simetría y solo hay 10 nodos, sugeriría que los enumere en un archivo de texto. Estoy considerando que el archivo que contiene la lista es el
list.txt
que contiene la lista de ip uno en cada línea como se muestra a continuación,Puedes usar este script,
Para actualizar el estado de ejecución de sus nodos en un intervalo de 30 minutos, use en crontab,
Salida de log.txt
fuente
$ cat host.txt
Ver:
http://www.thelinuxtips.com/2012/06/shell-script-to-ping-multiple-hosts/
fuente
Revisa este script.
Para ejecutar ./script 192.168.1 0 10, por ejemplo, esto comprueba los ips 192.168.1.0 a 192.168.1.10 y echo respondió si ping está bien y no respondió si no.
NB: puede reemplazar $ 1 $ 2 $ 3 por variables estáticas si el rango y las IP son siempre iguales.
fuente
Suponga que tiene 5 IP (para reducir solo la respuesta), luego puede hacer ping con
Nota: No se incluyen corchetes, sin comas (,) entre las IP.
Espero que ayude.
Ex:
fuente
cron
trabajo, sería necesario un medio para notificar al usuario el resultado del trabajo, o sugiere algo más?o con grep, ver solo nodos que no son ping
fuente
Bien
Tan simple como eso: use el
parallel --gnu
comando y luego su comando.Obtenga las IP de ejemplo:
fuente