2017-07-10 6 views
0

私は、ファイルに複数のファイルに含まれているIPSと出力失敗したIPをpingしfping使用するファイル内のホストをfpingダウン返すIPS

HOSTS.TXT

8.8.8.8 
8.8.4.4 
1.1.1.1 

ping.shすなわち

#!/bin/bash 
HOSTS="/tmp/hosts.txt" 
fping -q -c 2 < $HOSTS 

if ip down 
echo ip > /tmp/down.log 
fi 

だから私はdown.logファイル内1.1.1.1

答えて

1

fpingからデータを解析することはやや難しいようです。それは生きているが死んでいないホストのためのデータの解析を可能にする。問題を回避する方法として、同時に複数のホスト処理を可能にするために、生存しているすべてのホストをaliveという変数に置き、/ tmp/hosts.txtファイル内のホストをループし、ホストが生きているのか死んでいるのかを解読する変数。リターンコードが1の場合、grepはホストが見つからず、したがってdown.logにホストが見つからないことを示します。

alive=$(fping -c 1 -f ipsfile | awk -F: '{ print $1 }') 
while read line 
do 
    grep -q -o $line <<<$alive 
    if [[ "$?" == "1" ]] 
    then 
      echo $line >> down.log 
    fi 
done < /tmp/hosts.txt 
+0

'1.1.1.1:xmt/rcv /%loss = 1/0/100%'の出力を与えるfping -c(value)を使う必要がありますので、grep/awkを 'loss'にする必要があります – Lurch

+0

解決策を修正しました –

+0

ありがとうございました新しい1つdown.logは空白ですか? – Lurch

1

で終わるしたいと思います。ここRESUを得るための一つの方法ですあなたが欲しい。ただし、私はスクリプトのどこにでもfpingを使用しませんでした。 fpingの使用があなたにとって重要なのであれば、私はその点を完全に逃したかもしれません。

#!/bin/bash 

HOSTS="/tmp/hosts.txt" 

declare -i DELAY=$1 # Amount of time in seconds to wait for a packet 
declare -i REPEAT=$2 # Amount of times to retry pinging upon failure 

# Read HOSTS line by line 
while read -r line; do 
    c=0 
    while [[ $c < $REPEAT ]]; do 
     # If pinging an address does not return the word "0 received", we assume the ping has succeeded 
     if [[ -z $(ping -q -c $REPEAT -W $DELAY $line | grep "0 received") ]]; then 
      echo "Attempt[$((c + 1))] $line : Success" 
      break; 
     fi 

     echo "Attempt[$((c + 1))] $line : Failed" 

     ((c++)) 
    done 

    # If we failed the pinging of an address equal to the REPEAT count, we assume address is down 
    if [[ $c == $REPEAT ]]; then 
     echo "$line : Failed" >> /tmp/down.log # Log the failed address 
    fi 

done < $HOSTS 

使用方法:./script [遅延] [repeatCountに] - 「遅延」は、私たちがpingからの応答を待つ秒の合計額であるが、「repeatCountに私たちが失敗したときにpingを再試行回数ですアドレスがダウンしていると判断する前に

ここでは、/tmp/hosts.txtを1行ずつ読み、pingを使用して各アドレスを評価しています。アドレスへのpingが成功すると、次のアドレスに移動します。アドレスが失敗した場合、ユーザーが指定した回数だけ再試行します。アドレスがすべてのpingに失敗した場合は、/tmp/down.logにログインします。

pingに失敗したかどうかを確認するための条件は、ユースケースでは正確でない可能性があります。そのため、編集する必要があります。それでも、私はこれが一般的なアイデアを得ることを望みます。

+0

私は特にそれがfpingを必要とします。 – Lurch

関連する問題