logrotateの設定を新規に追加した時に、うまく動かなかったのでメモ。若干ほんとにこれでいいのかメモ。
まぁrailsなんですが、apache+FCGI(mod_railsもかな)です。
ログローテーションして、reloadして、な設定。
複数インスタンスのログを、ファイルサーバ上にhostname付きで配置しています。
1.設定ファイルを準備:/etc/logrotate.d/rails を作成。
/path_to_log/production.hostname.log { daily rotate 60 missingok notifempty sharedscripts postrotate /path_to_apachectl/apachectl reload > /dev/null 2>/dev/null || true endscript }
2.logrotate対象となったか、確認
# logrotate -dv /etc/logrotate.d/rails reading config file /etc/logrotate.d/rails reading config info for /path_to_log/production.hostname.log Handling 1 logs rotating pattern: /path_to_log/production.hostname.log after 1 days (60 rotations) empty log files are not rotated, old logs are removed considering log /path_to_log/production.hostname.log log does not need rotating not running postrotate script, since no logs were rotated
となって、ローテーション対象に含まれん・・・なんでー。
ので、下記でむりくり対応。
3.logrotateの履歴?に対象ファイルを追記:/var/lib/logrotate.status
# vi /var/lib/logrotate.status 〜 "/path_to_log/production.hostname.log" 2006/01/01
上記のファイルは、logrotateがローテーションの要・不要の判定をするために、前回のローテーション日を記録しているもの。
上記に今回ローテーション対象とするファイルを追記して、「ほらローテーションはだいぶ前だよ」と教えてあげると、
# logrotate -dv /etc/logrotate.d/rails reading config file /etc/logrotate.d/rails reading config info for /path_to_log/production.hostname.log Handling 1 logs rotating pattern: /path_to_log/production.hostname.log after 1 days (60 rotations) empty log files are not rotated, old logs are removed considering log /path_to_log/production.hostname.log log needs rotating ・・・
ときちんとローテーション対処と認識される。
うーんむりやり。