notebook

都内でWEB系エンジニアやってます。

logrotateの設定について

何度か設定周りの作業を行ってたりするけど毎回調べなおしているのでメモ

/etc/logrotate.conf で/etc/logrotate.d/***以下のファイルをインクルードしている 共通設定は/etc/logrotate.conf

例としてnginxのログをローテートさせる際の設定

/etc/logrotate.d/nginx.conf

/var/log/nginx/*.log {
    daily
    missingok
    rotate 180
    dateext
    delaycompress
    notifempty
    create 640 nginx root
    sharedscripts
    postrotate
            [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

ローテーションの間隔 daily:日ごと weekly:週ごと monthly:月ごと

  • create

ローテーション後ログファイルを作成、所有者などを指定する

  • lotate 180

ログを何世代分残すか、daily,logate 180の場合は180日分残す

  • notifempty

ログファイルが空ならローテーションしない

  • missingok

ログファイルが見つからなくてもエラーにしない

  • compress

ローテーションされたログファイルを圧縮する

  • delaycompress

一世代目は圧縮されない

a.log
a.log.1
a.log.2.gz
a.log.3.gz

こんな感じ

ちなみにこのdelaycompress、compressと併用しないとダメなようです。

てっきりdelaycompressだけで圧縮もやってくれるのかと思っていたら違いました。。。

  • dateext

ローテーションされたファイルのサフィックスを日付形式にする

a.log-20131028
  • sharedscripts ~ postrotate-endscript

ローテーション実施後に実行される部分

[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`

/etc/init.d/nginx reopen_logs

nginxの場合ログをローテーションする場合は上記どちらかのコマンドでローテーション出来るようです。

以上メモでした。