Bash
xargs

か弱い本番環境でxargs使って丁寧に1個ずつログファイルを圧縮する

More than 1 year has passed since last update.

想定している悲惨な環境

  • Webサーバーの/var/log以下にアクセスログが世代管理されずに放置されているので圧縮したい
  • 消すにしろ、圧縮するにしろ、本番環境なので一気にまとめてやるとI/OとかCPUとか死んでしまう(10年プレーヤーの物理サーバー辛い)
  • 意外とアクセスある

xargsの便利なpオプションで丁寧に

xargsにはp(スモールピー)オプションがあり、コマンド実行するかどうかを聞いてくれる。yもしくはYを押すと実行してくれるので、topコマンドで負荷見ながら実行してあげるといいと思います。nオプションを指定しておかないと元の木阿弥になるパターンがあるので忘れずに。

find . -name "*.log" | xargs -p -n1 gzip

圧縮済みのファイルとかが散らばっている場合には除外してあげてください。

find . -name "*.log" ! -name "*.gz" | xargs -p -n1 gzip

か弱い本番で死にかけるやり方

find . -name "*.log" -exec rm {} \;

とかやると死ぬ。

find . -name "*.log" -exec gzip {} \;

とかやっても死ぬ。
もし、か弱いサーバーに出会ったり作ってしまった場合にご活用くださいませ。