
このスクリプトは、パターン「ora」のログファイルを監視し、エラーの詳細を取得して電子メールを送信します。この場合、ログファイルにある最後のエラーのみを取得します。crontab を 5 分ごとに設定し、grep で誤ったアラートの原因となる同じ古いエラーを抽出します。スクリプトは現在の時刻でエラーを取得し、古いエラーの検索を避ける必要があります。
mailto=xyz.email.com
logdirectory=/location/to/logfile
cd $logdirectory
grep "ORA" logfile
if [ $? = 0 ]; then
mailx -s "errors" $mailto
fi
私のログファイル:
Fri Jun 07 05:09:32 2019 Archived Log entry 93 added for thread 1 sequence 59 ID 0xf10d426f dest 1:
Fri Jun 07 11:08:20 2019 07-JUN-19 ORA-1100: Testing, Please Ignore
答え1
オプション2を表示私のコメントとしてOPからのリクエスト:
awk -v parseLog='/some/where/filename' '
BEGIN {
prevNR=( (getline line < parseLog) > 0 ? line : 0 )
}
(NR>prevNR) && /ORA/{ print; found=1 }
END {
print NR > parseLog
exit !found
}
' /location/to/logfile
またはシェルの場合:
parseLog='/some/where/filename'
IFS= read -r line < "$parseLog"
if [[ -n "$line" ]]; then
prevNR="$line"
else
prevNR=0
fi
nr=$(wc -l < /tmp/logfile)
head -"$nr" /location/to/logfile |
tail +"$(( "$prevNR" + 1 ))" |
grep ORS
rslt=$?
printf '%d\n' "$nr" > "$parseLog"
最初に の行数を取得しwc
、head
その行数に対して を実行し、それを tail にパイプして、次に grep にパイプする必要があることに注意してください。そうしないと、 と の間でログ ファイルが大きくなり、grep
次wc
の反復で行が欠落する可能性があります。また、それらの順序を入れ替えると、同じ行が 2 回解析される可能性があります。
上記では、ログ ファイルに書き込む内容が 1 行につき 1 つのアトミック操作で実行されることを前提としていることに注意してください。行の一部を個別に書き込み、完了時に改行を追加する場合は、上記の解析でログ ファイルの最後の行 (部分的な行である可能性もある) を無視する必要があります。