実行すると、ホストが利用可能になるまでpingを開始するbashスクリプトをファイルに書き込もうとしています。 、ホストが到達可能になると、コマンドを実行して実行を停止します。コマンドを書き込もうとしましたが、カウントが終了するまでスクリプトはpingを続行します。
さらに、そのプロセスをバックグラウンドに置く必要がありますが、ドル($
)記号が付いたスクリプトは、引き続きフォアグラウンドで実行されます。
#!/bin/bash ping -c30 -i3 192.168.137.163 if [ $? -eq 0 ] then /root/scripts/test1.sh exit 0 else echo “fail” fi
回答
これを使用します。単純なワンライナーです:
while ! ping -c1 HOSTNAME &>/dev/null; do echo "Ping Fail - `date`"; done ; echo "Host Found - `date`" ; /root/scripts/test1.sh
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 &
もう一度
pingしようとしているホストを使用します。このアプローチでは、ホスト名を引数としてシェルスクリプトに渡します。
一般的な警告として、ホストがダウンしたままの場合、このスクリプトは、強制終了するか、強制終了するまで、バックグラウンドで継続的にpingを実行します。ホストが見つかりました。だから、これを実行するときはそれを覚えておきます。これを忘れると、システムリソースを消費してしまう可能性があるためです。
コメント
回答
パラメータ「-c30」をに渡すことによってping、30pingを試行して停止します。コマンドが成功したかどうかを確認します。 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。
コメント
回答
古い投稿ですが、提案として、pingで-w
オプションを使用できます。ループを避けてください。たとえば、
ping -w 30 -c 1 host
は1秒あたり1回のpingで30秒間試行し(デフォルトのpingではpingの間隔が1秒)、最初に成功したpingで終了します。 。
タイムアウトが必要ない場合、つまり永遠に待つ場合は、-w
で非常に大きな値を使用します。
回答
ping -oc 100000 Hostname > /dev/null && /root/scripts/test1.sh
-
ping -o
は
最初のパケットを受信した後
-
> /dev/null
は出力をリダイレクトするため、表示されません
-
&&
は、前のコマンドが成功した場合、次のコマンドを実行します
さらに、バックグラウンドで任意のプロセスを実行できます。最後に&
を追加します。たとえば、echo "123" &
はバックグラウンドで実行されます
回答
ここで機能していますスクリプトの変更。
#!/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
を入力すると、ping30になります。スクリプトが次の行に移動できるようになるまでの時間。 -c1
を使用して、スクリプトの実行速度を上げています。
-i
は、各パケットを送信するまで数秒待つことです。したがって、-i3
は3秒間待機します。スクリプトの実行を高速化するために、-i
を削除しました。
最後に重要なことですが、コードが見栄えがよく読みやすいようにインデントを使用します。
サンプル出力
user@linux:~$ ./script.sh ok user@linux:~$ user@linux:~$ ./script.sh “fail” user@linux:~$
回答
#!/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
コメント
/tmp
のファイルに保存することで、ホストがダウンした場合に' ll最終的に/tmp
に入力されます。それは悪いニュースになる傾向があります…