複数行のgrep出力からEメールを送信する

複数行のgrep出力からEメールを送信する

$ ERRORがキャッチされず、電子メールが受信されないか、テールが終了します。私は何が間違っていましたか?

tail -F --max-unchanged-stats=5 somelogfile.log | grep -B4 "FATAL" | while read ERROR
do
    echo $ERROR | mail -s 'FATAL ERROR' [email protected] && pkill -P $$ tail
done

ベストアンサー1

grep コマンドに "--line-buffered" を追加します。しかし、@Nickの回答によると、1行につき1つの電子メールが届きます。 grepコマンドから「-B4」パラメータを削除することもできます。

tail -F --max-unchanged-stats=5 somelogfile.log | grep -B4 --line-buffered "FATAL" | while 
read ERROR
do
    echo "$ERROR" | mail -s 'FATAL ERROR' [email protected]
done

この試み。 CentOS 6.9 VMでテストした結果、あなたが望むように動作すると思います。スクリプトを初めて実行するときにログファイルの下部付近に「致命的な」メッセージがある場合は、いくつかの電子メールを受け取ることができます。

#!/bin/bash

tail -f --max-unchanged-stats=5 somelogfile.log | grep --line-buffered "FATAL" | while read ERROR
do
    grep -B4 "$ERROR" somelogfile.log \
    | mail -s 'FATAL ERROR' [email protected]
done 

おすすめ記事