logrorateでログがローテーションされなかったので、解決策を調べてみた。
logrorate (ログローテート)とは
logrotateとは、Apacheのアクセスログや、syslogなど運用の中で肥大化していくログファイルを定期的に退避してローテートしてくれるツールです。
logrotateの設定ファイルは次の通りです。
- /etc/logrotate.conf 全てのログファイルに対しての設定
- /etc/logrotate.d/ ディレクトリ以下に個別のログファイルごとの設定
/etc/logrotated/ディレクトリ以下の個別の設定ファイルに記載した内容は、logrotate.confファイルに設定した内容より優先度が高くなります。
/etc/logrotate.confの設定例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# see "man logrotate" for details # rotate log files weekly weekly # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # system-specific logs may be also be configured here. |
Apacheのログファイル (access_logやerror_log ) をローテーションする場合
/etc/logrotate.d/httpd の設定例
1 2 3 4 5 6 7 8 9 |
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript } |
個別の設定ファイル /etc/logrotate.d/httpd の設定は、/etc/logrotate.confより優先されます。
指定しなかった場合は、logrotate.confの設定が適用され、何も記述が無いものに関してはlogrotateのデフォルト値が採用されます。
logratateがうまく行かない場合の対処方法、解決方法
logrotate を実際には実行せずに実行したらどのようになるかを試せる dry-run(リハーサル)モードがあるのでいつでも気軽に試せます。
-d をつけることで dry-run(リハーサル)モードで実行できます
1 |
$ /usr/sbin/logrotate -d /etc/logrotate.d/httpd |
-dオプションはテスト実行可能ですが、実際にはローテーションされないオプションになります。
/etc/logrotate.confファイルを指定する事も可能です。
この場合、lorotate.confファイル内で、各個別の設定ファイルが読み込まれるのでlogrotate.dディレクトリ以下の全てがテストの対象となります。
Redmineのログがローテートしない
Redmineのログがローテートしませんでした。
・https://redmine.jp/faq/system_management/production-log-rotate/
1 2 3 4 5 6 |
/var/lib/redmine/log/*log { missingok # ファイルが存在しなくてもエラーににない notifempty # copytruncate # ログを別名でコピーした後、元のファイルの内容を空にする compress # 古いログを圧縮して保存する } |
ドライランを行ってみます。
1 2 3 4 5 6 7 8 9 |
# logrotate -d /etc/logrotate.d/redmine reading config file /etc/logrotate.d/redmine Handling 1 logs rotating pattern: /var/lib/redmine/log/*log 1048576 bytes (no old logs will be kept) empty log files are not rotated, old logs are removed considering log /var/lib/redmine/log/production.log error: skipping "/var/lib/redmine/log/production.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation. |
うーん。。。
error: skipping "/var/lib/redmine/log/production.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
ログがローテートされない件の解決策
ログがローテートされない件の解決策は次の通りです。
- 親ディレクトリのパーミッションを 755 へ変更する
- ローテートするユーザーを設定で指定する ( /etc/logrotate.d/xxx にて、 su ディレクティブでユーザーを指定する)
こうすればいいのかな。
1 2 3 4 5 6 7 |
/var/lib/redmine/log/*log { su redmine redmine missingok notifempty copytruncate compress } |
コメント