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
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 doping
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 …?
/tmp
, se o host cair, você ' ll acabam enchendo/tmp
. Isso tende a ser uma má notícia …