tailf の結果をgrep してxargs したい場合
grep するだけなら問題ない。これは期待どおりに動く
tail -f a.log | grep name
grep が pipeの間に入ると厄介だ
tail -f a.log | grep name | grep type
この場合は正しく動作しない、中間に挟まったgrepがIOをバッファリングしてしまうので、最後のgrepまで即時にログが届かない
grep した結果をさらにパイプをしたいときにあれれ?となる。
ライン単位でバッファリングするようにする。
--line-buffered
コレをつけてバッファリングを行ごとにする。ただしこれはgrepそのもののパフォーマンスを劣化させるらしい(IO待ちのことでしょうね・・・何をどうして劣化するのかman には書いてなかったので気にしないことにしても良いような気が)
grep がバッファリングしてしまうので、確実に即時に反映されない。とくに コマンドの の間にgrep を挟み込みするときに厄介になる。
とくにtailf のような blocking io で ログが到着するまで、ブロックされるようなコマンドには特に威力を発揮する。
ログを監視して Slackに投げる方法で使いました。 →
http://takuya-1st.hatenablog.jp/entry/2017/05/11/073000