$ 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