シェルワンライナー160本ノック問題132
問題132 ログの監視&アラート
問題のファイルは
https://github.com/shellgei/shellgei160
からダウンロードできる。
ログファイルの文字列にどう反応すればいいのかいろいろ考えたがさっぱりで、今回はあきらめてしまった。
解答例は
tail -F /var/log/apache/access.log | grep --line-buffered ' 500 [0-9][0-9]*$' | while read line; do echo $line | mail -s "500 Error!" your.mail@example.com; done &
となる。まずtail -Fでファイルの監視をしつつ、増分を出力するようにする。そしてgrep でline-bufferedのオプションをつける。これにより結果が各行ごとにマッチしているかどうかの結果がすぐ出てくるようになる。マッチした行をパイプで渡し、無限ループで読ませつつ逐次メールを生成していく。