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
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 delping
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 …?
/tmp
, si el host falla, ' ll terminan llenando/tmp
. Suelen ser malas noticias …