web-dev-qa-db-ja.com

ホストの可用性を確認するためのBash pingスクリプトファイル

ファイルにbashスクリプトを書き込もうとすると、実行可能になるまでホストへのpingの実行を開始すると、ホストが到達可能になるとコマンドが実行されて実行が停止し、書き込みを試みましたが、スクリプトはカウントまでpingを続けます終わり、

さらに、そのプロセスをバックグラウンドで実行する必要がありますが、スクリプトをドル($)フォアグラウンドで実行されていることを示す署名、

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

私はこれを使用します、簡単なワンライナー:

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

HOSTNAMEを、pingしようとしているホストに置き換えます。


私はそれをバックグラウンドに置くことについての部分を逃しました、そのようにシェルスクリプトにその行を入れてください:

#!/bin/sh

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

そして、バックグラウンドで実行するには、次のようにします。

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

再度HOSTNAMEをpingしようとしているホストに置き換えます。このアプローチでは、シェルスクリプトに引数としてホスト名を渡します。

一般的な警告と同様に、ホストがダウンしたままの場合は、強制終了するかホストが見つかるまで、このスクリプトがバックグラウンドで継続的にpingを実行します。これを実行するときは、そのことを覚えておきます。これを忘れると、システムリソースを消費してしまう可能性があるからです。

11
devnull

パラメータ「-c 30」をpingに渡すと、pingを30回試行して停止します。コマンドが成功したかどうかを確認します。 1つのpingを含むループを実行して、このpingが成功するかどうかを確認するのが最善だと思います。そんな感じ:

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

まだフォアグラウンドで実行されているということは、ターミナルでまだ印刷しているということであれば、stdinとstdoutを/ dev/nullにリダイレクトできます。

5
David Bowman

古い投稿ですが、提案として、pingで-wオプションを使用してループを回避できます。例えば、

ping -w 30 -c 1 Host

毎秒1つのpingで30秒間試行し(デフォルトのpingはpingの間隔が1秒です)、最初に成功したpingで終了します。

タイムアウトが必要ない場合、つまりずっと待って、-wで非常に大きな値を使用してください。

4
Chris Welch
ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh 
  • ping -oは、最初のパケットを受信した後にpingを終了します
  • > /dev/nullは出力をリダイレクトするため、表示されません
  • &&は、前のコマンドが成功した場合、次のコマンドを実行します

さらに、プロセスの最後に&を追加することで、プロセスをバックグラウンドで実行できます。たとえば、echo "123" &はバックグラウンドで実行されます

2
Aman
#!/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
0
user355836

これはスクリプトの修正です。

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

画面に表示されないように、出力を/dev/nullに送信する必要があります。

-cはカウント用です。 -c30を指定すると、スクリプトが次の行に進む前にpingを30回実行します。 -c1を使用して、スクリプトの実行を高速化しています。

-iは、各パケットを送信する間隔を数秒待ちます。したがって、-i3は3秒待つことです。 -iを削除して、スクリプトの実行を高速化します。

最後に重要なことですが、コードを見やすく読みやすくするためにインデントを使用します。

サンプル出力

user@linux:~$ ./script.sh 
ok
user@linux:~$

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