Ansatzの備忘録

勉強したことあるいはふと思い立ったこと

シェルワンライナー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のオプションをつける。これにより結果が各行ごとにマッチしているかどうかの結果がすぐ出てくるようになる。マッチした行をパイプで渡し、無限ループで読ませつつ逐次メールを生成していく。