2016-07-20 9 views
0

サーバが起動しているかどうかを確認するためのスクリプトを作成したい場合は、30秒間スリープしてもう一度pingを実行します。しかし、私はそれを10分または20回繰り返すだけです。私は他のスクリプトがマシンとシステムの再起動を行うので、これを使う必要があるので、私は再びそれが来るのを待つ必要があります。それはちょうど非効率なので、私は巨大な睡眠時間を設定したくありません。サーバが起動しているかどうかを確認する

例として0.0.0.0をpingしています。

ありがとうございます!

#!/usr/bin/expect -f 
set timeout 30 
set max_try 20 
set tries 0 
spawn ping 0.0.0.0 

expect { 
    "64 bytes from 0.0.0.0" puts "servers are up" 
    if [ $tries -eq $max_try ]; then 
      puts "Test machine taking too long to reboot" 
      exit 
    fi 
    timeout {incr tries;exp_continue} 
} 
puts "Going to exit now" 
exit 
+0

**標準注意:** Pingは、ネットワークインターフェイスが稼動しているかどうかをテストします。システム上の実際のサービスが稼動しているかどうかは確認されません。私は、(すべてのユーザープロセスが壊れているため)完全に使用できなくなったにもかかわらず、pingに応答したシステムを見てきました。あなたがやっていることのような一時的なものであろうと、Nagiosのような永続的なものであろうと、これらの種類のことを心に留めておく必要があるかどうか、それがもたらす結果は完全に虚偽になります。 –

答えて

2

これはまったく期待する必要はありません。 bashの

function ping1 { 
    command ping -c 1 -W 1 "$1" >/dev/null 
} 

function ping2 { 
    if ! ping1 "$1"; then 
     sleep 120 
     ping1 "$1" 
    fi 
} 

host="0.0.0.0" 
if ping2 "$host"; then 
    echo "$host is up" 
else 
    echo "$host is down" 
fi 

新しい要件

function ping_many { 
    local tries=$1 host=$2 sleep=$3 
    while ((tries-- > 0)) && ! ping1 "$host"; do 
     sleep "$sleep" 
    done 
    return $((! (tries >= 0))) # have to invert the boolean value to a success/fail value 
} 

ping_many 20 0.0.0.0 30 
+0

ありがとうございます、これはうまくいくでしょうが、2分の検査を受けることはあまりにも時間がかかることに気付きました。私は30秒間の点検に変更し、それを20回ループさせました。私は20の新しい出来事を作ることができないことを知っています。 –

+0

回答が更新されました。 –

0

では私が興味を持って他のケースの誰で、それを考え出しました。 \ 003はctrl + cを意味します

#!/usr/bin/expect -f 
set timeout 5 
set max_try 20 
for {set i 0} {$i < $max_try} {incr i 1} { 
     puts "loop $i" 
     spawn ping -c 2 -i 3 -W 1 0.0.0.0 
     expect { 
       "2 packets transmitted, 2 received" {puts "servers are up"; break} 
       timeout {send \003} 
     } 
     sleep 30 
} 
puts "about to exit now"; 
exit 
関連する問題