2014-09-10

ログファイルに指定の文字列が指定回数出力されたらイベントを発生させる

/var/log/messagesにerrorという文字列が3回出力されたら"Detect!"という文字を出力させる場合だとこんな感じ

str="error";threshold=3;count=0;tail -n 0 -F /var/log/messages | while read i;do echo $i | grep -q $str && count=`expr $count + 1` && test $count -ge $threshold && echo 'Detect!' && break; done

→ちょっと改善 2015-03-20 ※簡略化&条件達成時に即プロンプトが戻るように
str="error";threshold=3;c=0;while read i;do [[ $i =~ $str ]] && ((c++)) && [[ $c -ge $threshold ]] && echo 'Detect!' && break; done< <(tail -n 0 -F /var/log/messages)
これを実行しつつ、別のところで
logger "test error"
logger "test error"
logger "test error"
と3回出力すると、"Detect!"と表示されましたヾ(*・∀・)ノ"

0 件のコメント:

コメントを投稿