Apache で DocumentRoot を変えた際にログの出力先も一緒に変更していたのだけど、デフォルト(/var/log/apache2)から変更すると logrotate が動いてくれない!ということで調べてみたら、 logrotate は自分で設定しなければならないとの事。
Ubuntu11.10 の場合、 logrotate の設定は以下のファイル及びディレクトリ以下にある。
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf から /etc/logrotate.d/ 以下のファイルを読み込む様にしてある。
/etc/logrotate.d/apache2 というファイルがあったので、ここに設定を追加してやる。
$ sudo vim /etc/logrotate.d/apache2
# 以下を追加
/home/www/logs/*.log {
weekly
missingok
rotate 5
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
/etc/init.d/apache2 reload > /dev/null
fi
endscript
}
基本的にデフォルトの値をそのまま使っている、はず。
一応オプションは man で調べてみた。上記設定で使ってるもの+ぱっと目に入ったものだけ。
- compress
- 古いログはgzipで圧縮する。
- compresscmd
- 圧縮する際のコマンドを指定する。デフォルトは gzip
- uncompresscmd
- 圧縮されたログを解凍する際のコマンドを指定する。デフォルトは gunzip
- nocompress
- 古いログを圧縮しない。
- rotate count
- ログファイルを何個作成するか。count以上ログが大きくなる時は古いログが削除される。
- minsize size
- 指定されたサイズよりログファイルが大きくなればローテートする。
- ifempty
- ログが空でもローテートする。(デフォルト)
- notifempty
- ログが空ならローテートしない。
- olddir directory
- ログを指定されたディレクトリへ移動する。
- daily
- 日単位でローテートする。
- monthly
- 月単位でローテートする。
- weekly
- 週単位でローテートする。
- yearly
- 年単位でローテートする。
- prerotate - endscript
- ログファイルをローテートする前に指定されたスクリプトを実行する
- postrotate - endscript
- ログファイルをローテートした後に指定されたスクリプトを実行する
- sharedscripts
- prerotate等でスクリプトが指定された場合にスクリプトが実行する回数を一回に抑える。
- create mode owner group
- ローテーションをした直後にログファイルを指定の owner group mode で作成する。
- nocreate
- ローテーションをした直後にログファイルを作成しない。