Arquivo de script bash ping para verificar a disponibilidade do host

Estou tentando escrever um script bash em um arquivo que, ao ser executado, iniciaria o ping em um host até que ele se tornasse disponível , quando o host se torna acessível, ele executa um comando e para de ser executado, tentei escrever um, mas o script continua pingando até que a contagem termine,

Além disso, preciso colocar esse processo em segundo plano, mas se eu executar o script com o dólar ($) assine que ainda é 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 

Resposta

Eu usaria isso, uma linha simples:

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

Substitua HOSTNAME com o host que você está tentando pingar.


Eu perdi a parte sobre colocá-lo em segundo plano, coloque 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 segundo plano, você deve executá-lo assim:

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

Substitua novamente HOSTNAME com o host que você está tentando executar ping. Nesta abordagem, você está passando o nome do host como um argumento para o shellscript.

Apenas como um aviso geral, se o seu host permanecer inativo, você terá esse script executando ping continuamente em segundo plano até que você o mate ou o host é encontrado. Portanto, manteria isso em mente quando você executasse isso. Porque você pode acabar comendo recursos do sistema se se esquecer disso.

Comentários

  • Tnx para a resposta e o aviso, este é um ambiente visualizado portanto, o script iniciará após a inicialização dos servidores físicos, de modo que os ' s da VM certamente iniciarão, mas lembrarei que se eu excluir uma VM, tnx novamente
  • Em particular, registrando as falhas todas as vezes e armazenando toda a saída em um arquivo em /tmp, se o host cair, você ' ll acabam enchendo /tmp. Isso tende a ser uma má notícia …

Resposta

Passando os parâmetros “-c 30” para ping, ele tentará 30 ping e parará. Depois, verificará se o comando foi bem-sucedido. Acho melhor fazer um loop que contenha um ping e verificar se o ping deu certo. Algo assim:

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

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

Comentários

  • Ao desbloquear o prompt para que eu pudesse trabalhar em outra coisa, tnx para obter ajuda

Resposta

Uma postagem antiga, mas como sugestão, você pode usar a opção -w no ping para evite 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, ou seja, espere para sempre, basta usar um valor muito grande com -w.

Resposta

ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -o sai do ping depois que o primeiro pacote for recebido
  • > /dev/null redireciona a saída, então você não verá
  • && executaria o próximo comando, se o comando anterior fosse bem-sucedido

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

Resposta

Aqui está funcionando modificação do seu script.

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

Você precisa enviar a saída para /dev/null para que não apareça em a tela.

-c foi feito para contar. Se você colocar -c30, fará o ping 30 vezes antes que seu script possa avançar para a próxima linha. Eu uso -c1 para fazer o script rodar mais rápido.

-i é esperar segundos entre o envio de cada pacote. Portanto, -i3 deve aguardar 3 segundos. Eu removo -i para fazer o script rodar mais rápido.

Por último, mas não menos importante, use recuo para que seu código tenha uma aparência agradável e fácil de ler.

Exemplo de saída

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

Resposta

#!/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 

Comentários

  • Você também pode querer para adicionar algumas palavras explicativas …?

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *