apacheのログ「access_log」「error_log」はほっておくとどんどん容量が増えて無駄にディスクを消費する上にapacheのパフォーマンスが落ちます。
ログをローテーションするには「logrotate」を使用します。
vi /etc/logrotate.conf
weekly
rotate 4
errors root
create
include /etc/logrotate.d
weekly:週単位でローテーション(daily:日単位 monthly:月単位)
rotate 4:最大4つ前までのファイルを残す
errors root:エラーがあれば rootまでメールする
create [パーミッション] [グループ名] [ユーザ名]:ローテーション後すぐに同名のログファイルを作成する。
compress:.gz ファイルに圧縮する
notifempty : ログがカラならローテーションしない
missingok : ファイルが存在しない場合でもエラーとしない
include /etc/logrotate.d:/etc/logrotate.d ディレクトリ以下の設定ファイルを読み込む
dateext : ローテーションしたファイルに日付をつける
dateformat _%Y-%m : ローテーションしたファイルに指定したフォーマットの日付をつける
vi /etc/logrotate.d/httpd
でファイルを開くと
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/httpd.pid 2>/dev/null` 2> /dev/null || true
endscript
}
となっている。
notifempty があると ログファイルがから場合ローテーションを実行しないので、
テストの段階ではこれを削除しておくほうが挙動がわかりやすくなります。
使用しているログファイルが「access_log」「error_log」ならこのままでOK。
ログファイルが「access_log.sitename.com」「error_log.sitename.com」等に変更してある場合は
/var/log/httpd/*log {
↓
/var/log/httpd/*log.sitename.com {
に変更する。
また複数のファイルはスペースで区切って指定する
/var/log/httpd/*log.siteA.com /var/log/httpd/*log.siteB.com {
ローテーション設定の確認をするには -d オプションをつけて実行します
logrotate -d /etc/logrotate.d/httpd
ローテーション設定の確認をするには -f オプションをつけて実行します
動作を確認するには -v オプションもつけて実行するとより良いです。
logrotate -f -v /etc/logrotate.d/httpd
crontabの設定にで logrotate が組み込まれているかどうかを調べる
ls /etc/cron*
表示されるリストに
/etc/cron.daily:
logrotate man-db.cron
logrotate があればanacronで起動する設定になっています。
実際に起動されたかどうかを見るには
cat /var/log/cron | grep 'cron.daily'
で確認します。
logrotate は設定ファイル /etc/cron.daily/logrotate に記述がされてあり、
このファイルは anacron から実行されます。
anacronはcronと違って以下のような特徴があります
なので決まった時刻に正確に事故した場合はクーロンから起動するとよいでしょう。 例
mv /etc/cron.daily/logrotate /root/
crontab -e
(毎日4時半に実行するには以下のように記述する)
30 4 * * * /root/logrotate