2016-12-23 1 views
0

タイトルが明確でない場合は、ごめんなさい。ファイル内の発生回数をカウントします。条件付きパターンマッチング

15分ごとに読み込まれ、その中に特定のパターン(タイムアウトなど)があるファイルがあります。ファイルには固定の更新頻度がありません。

予想される結果: - 1.パターンが15分で3回見つかった場合は、command1を実行します。 2.パターンが15分で5回見つかった場合は、command2を実行します。

各チェックの最後の読み取り位置から読み取られるファイル。これを行うには

おかげで、 GRV

+4

ここまでお試しいただいたことはありますか?最も重大な実装は、毎回パターンの合計発生数を読み取り、そのカウントをファイルに格納することです。 15分ごとに、現在のカウントと以前に格納されたものとを比較します。 – codeforester

+0

あなたのコードを表示 –

答えて

0

一つの方法は、cron仕事です。それは他のソリューションよりも複雑ですが、非常に信頼性があります(「チェックスクリプト」がクラッシュしても、期間が過ぎるとcronで再度呼び出されます)。 cronは次のようになります。

*/15 * * * * env DISPLAY=:0 /folder/checkscript >/dev/null 2>&1 

(注意env DISPLAY=:0は、あなたの場合に必要とされない可能性があります、またはそれはあなたのスクリプトに応じて、必要になる可能性があります:あなたは、あなたの場合にこれを適応する必要があるかもしれません、見つけるために、エコー$DISPLAYを実行しますあなたの変数をケースに入れてください)。それは、あなたの質問には含まれていません

#!/bin/bash 
if [ -f /tmp/checkVarCount ]; then oldCheckVar="$(cat /tmp/checkVarCount)"; else oldCheckVar="0"; fi 
checkVar="$(grep -o "pattern" /folder/file | wc -l)" 
echo "$checkVar" > /tmp/checkVarCount 
checkVar="$(($checkVar-$oldCheckVar))" 
if [ "$checkVar" -eq 3 ]; then command1; fi 
if [ "$checkVar" -eq 5 ]; then command2; fi 
exit 

、しかし、あなたが同様のパターンが4回か7回を発見された場合、コマンドを実行することを意図した場合は、変更することができます:

あなた"checkscript"は可能性があり上記の関連する部分:

if [ "$checkVar" -ge 3 ] && [ "$checkVar" -lt 5 ]; then command1; fi 
if [ "$checkVar" -ge 5 ]; then command2; fi 
+0

cronジョブでディスプレイを設定することの意義は何ですか? – diametralpitch

+0

一部のプログラムは、 'cron'から呼び出されたときにこの環境変数がなければ実行できません。 –

関連する問題