Arquivo de script de ping Bash para verificar a disponibilidade do host

2

Estou tentando escrever um script em um arquivo que, quando executado, inicia o ping de um host até que ele se torne disponível; quando o host se torna acessível, ele executa um comando e para de executar; até a contagem terminar,

Além disso, preciso colocar esse processo em segundo plano, mas se eu executar o script com o sinal $, ele ainda será executado em primeiro plano,

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

Qualquer ajuda seria apreciada com antecedência!

    
por dusan90 11.02.2015 / 16:46

4 respostas

8

Eu usaria isso, um simples liner:

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

Substitua HOSTNAME pelo host que você está tentando fazer ping.

Eu perdi a parte de colocá-lo no fundo, coloquei essa linha em um shellscript assim:

#!/bin/sh

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

E para contextualizar você executaria da seguinte forma:

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

Novamente, substitua HOSTNAME pelo host que você está tentando fazer ping. Nesta abordagem, você está passando o nome do host como um argumento para o shellscript.

Assim como um aviso geral, se o seu host ficar inativo, você terá esse script ping continuamente em segundo plano até que você o mate ou o host seja encontrado. Então, eu teria isso em mente quando você executar isso. Porque você pode acabar comendo os recursos do sistema se esquecer isso.

    
por 11.02.2015 / 17:08
4

Passando os parâmetros '-c 30' para ping, ele tentará 30 ping e parará. Ele irá verificar depois se o comando for bem sucedido. Eu acho que é melhor fazer um loop que contém um ping e verificar se esse ping é bem-sucedido. Algo assim:

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

Se ainda estiver rodando em primeiro plano, você quer dizer que ainda está imprimindo no terminal, você pode redirecionar stdin e stdout para / dev / null. Espero que ajude

    
por 11.02.2015 / 17:04
1
ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o sai do ping depois que o primeiro pacote é recebido
  • > /dev/null redireciona a saída para que você não a veja
  • && executaria o próximo comando, se o comando anterior for bem sucedido

Além disso, você pode executar qualquer processo em segundo plano adicionando & ao final dele; por exemplo, echo "123" & será executado em segundo plano

    
por 11.02.2015 / 17:16
1

Uma postagem antiga, mas como sugestão, você pode usar a opção -w no ping para evitar o loop. Por exemplo,

ping -w 30 -c 1 host

tentará por 30 segundos com um ping por segundo (o ping padrão tem intervalo de 1 segundo entre os pings) e sairá no primeiro ping bem-sucedido.

Se você não precisa de um tempo limite, por exemplo wait for ever, apenas use um valor muito grande com -w .

    
por 24.08.2016 / 16:36