最新のファイルの Grep 文字列と見つかった場合の警告/メール

最新のファイルの Grep 文字列と見つかった場合の警告/メール

テキストベースのファイルがたくさんあるフォルダから「FCE-Error」文字列を取得したいと思います。

フォルダはこんな感じです。

-rw-r--r-- 1 root root        0 May 22 10:30 T201805220930.CIR
-rw-r--r-- 1 root root 11298297 May 22 10:40 T201805220935.CDR
-rw-r--r-- 1 root root        0 May 22 10:35 T201805220935.CIR
-rw-r--r-- 1 root root 12230924 May 22 10:45 T201805220940.CDR
-rw-r--r-- 1 root root        0 May 22 10:40 T201805220940.CIR
-rw-r--r-- 1 root root 12707339 May 22 10:50 T201805220945.CDR
-rw-r--r-- 1 root root        0 May 22 10:45 T201805220945.CIR
-rw-r--r-- 1 root root 13080477 May 22 10:55 T201805220950.CDR
-rw-r--r-- 1 root root        0 May 22 10:50 T201805220950.CIR
-rw-r--r-- 1 root root 13762418 May 22 11:00 T201805220955.CDR
-rw-r--r-- 1 root root        0 May 22 10:55 T201805220955.CIR
-rw-r--r-- 1 root root 13582035 May 22 11:05 T201805221000.CDR
-rw-r--r-- 1 root root        0 May 22 11:00 T201805221000.CIR
-rw-r--r-- 1 root root 13910251 May 22 11:10 T201805221005.CDR
-rw-r--r-- 1 root root        0 May 22 11:05 T201805221005.CIR
-rw-r--r-- 1 root root  3360658 May 22 11:11 T201805221010.CDT
-rw-r--r-- 1 root root        0 May 22 11:10 T201805221010.CIT

5分ごとに新しいファイルを作成するCDTファイル=リアルタイム実行ログファイルCDRファイル=新しいファイルを作成する前の古いCDTファイル

この文字列FCE-Errorを見つけるには、.cdtまたはcdrファイルをgrepするbashスクリプトが必要です。

肯定的な値/項目が見つかったら、電子メールで通知を送信する必要があります。

答え1

ファイルが現在のディレクトリにあり、次を使用しているとしますbash

files=( T*.CDT )
grep 'FCE-Error' "${files[-1]}"

.CDTこれにより、その文字列の最新のファイルが検索されます。他の種類のファイルでも同じことができます。

シェルワイルドカードパターンは、T*.CDTアルファベット順にソートされた一致するすべてのファイル名に拡張され、通常のファイル名(正しいソートの正しいタイムスタンプを含む)を使用しているため、最後のファイルが最新のファイルになります。

文字列が見つかったら、電子メールで警告を送信します。

files=( T*.CDT )
if grep -q 'FCE-Error' "${files[-1]}"; then
    mail -s 'Alert' [email protected] <<END_MESSAGE
We've found "FCE-Error" in ${files[-1]}, do something!
END_MESSAGE
fi

別のPOSIXシェルを使用してください。

set -- T*.CDT            # set positional parameter to all matching filenames
shift "$(( $# - 1 ))"    # shift off all but the last filename
if grep -q 'FCE-Error' "$1"; then
    mail -s 'Alert' [email protected] <<END_MESSAGE
We've found "FCE-Error" in $1, do something!
END_MESSAGE
fi

答え2

私の考えでは、これは次のようになります。

[ $(find /path/to/dir -cmin -5 -type f -exec grep -F 'FCE-Error' {} \; | wc -l) -gt 0 ] && mail [...] # I let you complete mail command

この行は最後の5分(-cmin -5)以内に生成されたファイル(-type f)を検索(検索)し、grep実行ごとに出力をwcに渡して行数を計算し、結果全体を比較します。 0(-gt)に設定すると、trueの場合はmailコマンドがトリガーされ、メールが送信されます。

5分ごとにcronで実行するようにこのコマンドを設定することができ、重複警告を避ける必要があります(警告が発生し、cronが時間に合わないいくつかの極端な場合)

答え3

最新の.cdt/cdrファイルのみをgrepしますか?

dir=/path/to/files
lastCIR="$(find ${dir} -type f -name '*.CIR' | tail -1)"
lastCDR="$(find ${dir} -type f -name '*.CDR' | tail -1)"

if grep FCE-Error "${lastCIR}" || grep FCE-Error "${lastCDR}";then
  echo 'alert' | mail -s subject [email protected]
fi

関連情報