Rails + Unicorn の logrotate
調べたこと
Railsで作成したアプリケーションをUnicornから起動させたときの、ログローテーションのやり方を調べてみた。
仕掛け
Unicornには、USR1シグナルを送ると、ログファイルを開きなおしてくれる機能が備わっている。そのため、現在のログをリネームした後、USR1シグナルを送信すれば、ログをローテートできるようだ。
Unicornのlogrotate設定
上記を踏まえ、logrotateの設定ファイルはこんな感じにしてみた。
/home/sample/rails_app/log/*.log { daily missingok rotate 60 dateext # 圧縮設定 (圧縮は次回のローテートまで遅らせる) compress delaycompress # unicorn masterプロセスに、USR1シグナルを送る lastaction pid=/home/sample/rails_app/tmp/pids/unicorn.pid test -s $pid && kill -USR1 "$(cat $pid)" endscript }
これを /etc/logrotate.d/rails_app に配置して設定は完了。
補足:ログローテーションの動作確認方法
logrotateの設定ファイルをテストするには、-d オプションをつける。
# logrotate -d /etc/logrotate.d/rails_app
このコマンドでは、実際にローテーションは行われずに、設定に問題がないかを確認できる。
また、-dオプションを付けずに、ログローテーションを実行すると、/var/lib/logrotate.status に、日付が記録される。
この日付を編集して、ローテートの動作を確認することができる。