Archivo de script bash ping para verificar la disponibilidad del host

Estoy tratando de escribir un script bash en un archivo que, cuando se ejecute, comenzará a hacer ping a un host hasta que esté disponible , cuando el host se vuelve accesible, ejecuta un comando y deja de ejecutarse, intenté escribir uno pero el script continúa haciendo ping hasta que finaliza el recuento,

Además, necesito poner ese proceso en segundo plano, pero si ejecuto el script con el signo de dólar ($) todavía se ejecuta en primer plano,

#!/bin/bash ping -c30 -i3 192.168.137.163 if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 else echo “fail” fi 

Respuesta

Yo usaría esto, una simple frase de una sola línea:

while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh 

Reemplazar HOSTNAME con el host al que está intentando hacer ping.


Me perdí la parte de ponerlo en segundo plano, poner esa línea en un shellscript así:

#!/bin/sh while ! ping -c1 $1 &>/dev/null do echo "Ping Fail - `date`" done echo "Host Found - `date`" /root/scripts/test1.sh 

Y para ponerlo en segundo plano, lo ejecutaría así:

nohup ./networktest.sh HOSTNAME > /tmp/networktest.out 2>&1 & 

Reemplace nuevamente HOSTNAME con el host al que está intentando hacer ping. En este enfoque, está pasando el nombre de host como un argumento al shellscript.

Solo como advertencia general, si su host permanece inactivo, este script hará ping continuamente en segundo plano hasta que lo elimine o se encuentra el anfitrión. Así que lo tendré en cuenta cuando ejecutes esto. Porque podrías terminar consumiendo recursos del sistema si te olvidas de esto.

Comentarios

  • Tnx para la respuesta y la advertencia, este es un entorno visualizado por lo que la secuencia de comandos se iniciará después de que se inicien los servidores físicos, por lo que las ' s de VM se iniciarán sin duda, pero tendré en cuenta que si elimino una VM, tnx nuevamente
  • En particular, registrando las fallas cada vez y almacenando toda la salida en un archivo en /tmp, si el host falla, ' ll terminan llenando /tmp. Suelen ser malas noticias …

Responder

Pasando los parámetros «-c 30» a ping, intentará 30 ping y se detendrá. Verificará después si el comando tiene éxito. Creo que es mejor hacer un ciclo que contenga un ping y verificar si este ping tiene éxito. Algo así:

while true; do ping -c1 google.com if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 fi done 

Si al seguir ejecutándose en primer plano, quiere decir que todavía está imprimiendo en la terminal, puede redirigir stdin y stdout a / dev / null.

Comentarios

  • Al desbloquear el mensaje para poder trabajar en otra cosa, tnx para obtener ayuda

Answer

Una publicación antigua, pero como sugerencia, puedes usar la opción -w al hacer ping a evitar el bucle. Por ejemplo,

ping -w 30 -c 1 host 

intentará durante 30 segundos con un ping por segundo (el ping predeterminado tiene un intervalo de 1 segundo entre pings) y saldrá en el primer ping exitoso .

Si no necesita un tiempo de espera, es decir, espere para siempre, simplemente use un valor muy grande con -w.

Respuesta

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o sale del ping después de recibir el primer paquete
  • > /dev/null redirige la salida, por lo que no «la verá
  • && ejecutaría el siguiente comando, si el comando anterior fue exitoso

Además, puede ejecutar cualquier proceso en segundo plano si agregando & al final; por ejemplo, echo "123" & se ejecutará en segundo plano

Respuesta

Aquí está funcionando modificación de su secuencia de comandos.

#!/bin/bash ping -c1 10.1.1.23 > /dev/null if [ $? -eq 0 ] then echo ok exit 0 else echo “fail” fi 

Debe enviar la salida a /dev/null para que no aparezca en la pantalla.

-c es para contar. Si pones -c30, vas a hacer ping 30 veces antes de que su guión pueda pasar a la siguiente línea. Utilizo -c1 para hacer que el script se ejecute más rápido.

-i es esperar segundos entre el envío de cada paquete. Entonces -i3 es esperar 3 segundos. Elimino -i para que la secuencia de comandos se ejecute más rápido.

Por último, pero no menos importante, use sangría para que su código se vea bien y sea más fácil de leer.

Salida de muestra

user@linux:~$ ./script.sh ok user@linux:~$ user@linux:~$ ./script.sh “fail” user@linux:~$ 

Respuesta

#!/bin/sh if [ $1 ] then for i in ` cat $1` do VAR1=$(ping -ac 2 $i| grep -c error) if [ $VAR1 == "0" ] then echo " valid : $i" else echo " invalid : $i" fi done else echo " please present the file name. example: pong /tmp/a " fi 

Comentarios

  • Es posible que también desee para agregar algunas palabras explicativas …?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *