Phusion Passengerのログローテート設定2017/04/12

logrotateでファイルがmvされてもPassengerは以前のファイルを掴んだままなので、これを手放させる必要がある。 方針は2つ?

logrotateをcopytruncateモードで動かす。

  • 旧ログをmvではなくcpした上で旧ログの内容をクリアする。
  • 処理時間がかかるのでログの取り零しが発生しうる。
# /etc/logrotate.d/passenger.log
/path/to/app/shared/log/*log {
  weekly
  missingok
  rotate 1000
  create 0644 user group
  copytruncate
  dateext
}

logrotateのpostrotateでPassengerにアプリを再読み込みさせる。

  • ログの取り零しは発生しない。
  • 次回のアクセス時にRailsの起動コストがかかる。
# /etc/logrotate.d/passenger.log
/path/to/app/shared/log/*log {
  weekly
  missingok
  rotate 1000
  create 0644 user group
  dateext
  sharedscripts
  postrotate
    touch /path/to/app/current/tmp/restart.txt
  endscript
}

うちは緩いサービスなのでcopytruncateで良いけど、copytruncateで取り零しが発生するようなサービスだと、Railsの起動コストはもっと耐えられないような気がするけど……。