去年の7月から Sinatra + Unicorn で動かしている Web アプリがあるんだけど、そのログファイルが巨大になっていた。↓の unicorn.log がそれ。75MBにもなっている。
そこで、logrotate を使ってみることにした。
takatoh@nightschool $ ls -lh 合計 75M -rw-rw-r-- 1 sombrero sombrero 752 7月 26 2014 CHANGES -rw-rw-r-- 1 sombrero sombrero 122 7月 26 2014 Gemfile -rw-rw-r-- 1 sombrero sombrero 468 7月 26 2014 Gemfile.lock -rw-rw-r-- 1 sombrero sombrero 7.5K 1月 4 10:39 app.rb -rw-rw-r-- 1 sombrero sombrero 64 7月 26 2014 app.ru drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 bin -rw-rw-r-- 1 sombrero sombrero 327 7月 26 2014 boot.rb -rw-rw-r-- 1 sombrero sombrero 126 7月 26 2014 config.yaml -rw-rw-r-- 1 sombrero sombrero 104 7月 26 2014 config.yaml.sample drwxrwxr-x 3 sombrero sombrero 4.0K 4月 8 04:59 db drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 lib drwxrwxr-x 3 sombrero sombrero 4.0K 7月 26 2014 public -rw-rw-r-- 1 sombrero sombrero 705 7月 26 2014 rakefile -rw-rw-r-- 1 sombrero sombrero 14 7月 26 2014 start.cmd drwxrwxr-x 2 sombrero sombrero 4.0K 4月 8 05:00 tmp -rw-rw-rw- 1 sombrero sombrero 109 7月 26 2014 unicorn.conf -rw-rw-r-- 1 sombrero sombrero 75M 4月 8 16:50 unicorn.log -rw-r--r-- 1 root root 5 3月 24 20:43 unicorn.pid -rw-rw-r-- 1 sombrero sombrero 32 7月 26 2014 version.rb drwxrwxr-x 2 sombrero sombrero 4.0K 7月 26 2014 views
参考になったのは次のページ。
cf. Rails + Unicorn の logrotateAdd Star – yoshioblog
cf. ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 )
特に上のページを参考にして設定ファイルを書いてみた。設定ファイルは /etc/logrotate.d ディレクトリの下に、サービス名でファイルを作ればいいようだ。
書いた設定がこれ。
/home/sombrero/sombrero/unicorn.log { daily missingok rotate 60 dateext compress delaycompress postrotate pid=/home/sombrero/sombrero/unicorn.pid test -s $pid && kill -USR1 "$(cat $pid)" endscript }
設定の意味は次の通り。
daily
毎日ローテーションするmissingok
ログファイルがなくてもエラーを出さないrotate 60
60回ローテーションするdateext
ローテーションされたログファイルのサフィックスを日付形式にするcompress
ローテーションされたログファイルを圧縮するdelaycompress
圧縮するのを次のローテーションの時にする
postrorate と endscript の間の記述は、ローテーションが終わったあとに実行される。
Unicorn は USR1 シグナルを受け取ると、ログファイルを開きなおしてくれるそうなので、そうしている。
logrotate -d で確認する。
takatoh@nightschool $ logrotate -d sombrero reading config file sombrero Handling 1 logs rotating pattern: /home/sombrero/sombrero/unicorn.log after 1 days (60 rotations) empty log files are rotated, old logs are removed considering log /home/sombrero/sombrero/unicorn.log log does not need rotating
エラーらしきものは出てないから大丈夫のようだ。
あとは1日待って確認しよう。