2016-08-29 10 views
2

RHEL 7.1は、これが使用されるOSです。リモートポートを監視し、正常に実行されなかった場合はスクリプトを起動するLinuxスクリプト

私は同じ(AとB)の2台のサーバーを持っています。サーバーBはサーバーAのポートを監視し、30秒間停止している場合はスクリプトを起動する必要があります。私は、これは私がこれまで持っているものであるのnetcatをRHEL 7にNCATと交換した読み:

#!/bin/bash 
Server=10.0.0.1 
Port=123 
ncat $Server $Port &> /dev/null; echo $? 

ポートがアップしている場合は、ポートがダウンしている場合、出力は0で、出力は1です。私は」 「30秒間ダウンしてからxスクリプトを起動する」という次の部分をどうやって行うのか分かりません。

助けてください。前もって感謝します。

+1

独自のツールを使用することを検討しましたか? –

+0

たとえば、共有仮想IPを引き継ぐ場合、これは[Pacemaker](http://clusterlabs.org/wiki/Main_Page)のためのもので、あなたの小さな自宅のスクリプトよりはるかに優れた仕事をします。 –

+3

HAにはコーナーケースがたくさんあります。お使いのシステムが互いに通信できない場合でも、外界を見ることができる場合は、楽しいもののひとつがスプリットブレインです。悲しいかな、これらのコーナーケースは本当に起こります。もしあなたがそれらの知識なしに何かを書いているのであれば、それはバグがいっぱいになるでしょう。 –

答えて

1

あなたが本当にむしろ@CharlesDuffyが示唆したように、あなたはこのような何かを行うことができ、Pacemakerなどの専用ツールを使用するよりも、スクリプトこれをしたい場合:

  • ポートをチェックし、無限ループ
  • を実行します
    • アップすると、タイムスタンプを保存します
    • 最後に保存されたタイムスタンプ
      • より多くの時間が閾値を次に渡す場合、例えばスリープビット

  • のスクリプトを実行します。

    #!/bin/bash 
    
    server=10.0.0.1 
    port=123 
    seconds=30 
    
    seen=$(date +%s) 
    while :; do 
        now=$(date +%s) 
        if ncat $server $port &> /dev/null; then 
         seen=$now 
        else 
         if ((now - seen > seconds)); then 
          run-script && exit 
         fi 
        fi 
        sleep 1 
    done 
    
  • +0

    これは非常に役に立ちます。私は実際にnmapに移行していますが、この例を使ってこの作業をしています。 – Ric

    1
    #!/bin/bash 
    Server=10.0.0.1 
    Port=123 
    port_was_down=0 
    while true; do 
        sleep 30 
        if ! ncat $Server $Port &> /dev/null; then 
         if [[ $port_was_down == "1" ]]; then 
          run-script 
          exit 
         else 
          port_was_down=1 
         fi 
        else 
         port_was_down=0 
        fi 
    done 
    
    +1

    これは参考になりました。ありがとうございました。 – Ric

    0

    かについてnmapを使って? 次のようなもの:

    TIMEOUT=30s; 
    HOST=10.0.0.1; 
    PORT=123; 
    if nmap --max-rtt-timeout $TIMEOUT --min-rtt-timeout $TIMEOUT -p $PORT $HOST | grep "^$PORT.*open"; then 
        echo 'OPEN'; 
    else 
        echo 'CLOSED'; 
    fi; 
    
    関連する問題