LoginSignup
1
1

More than 3 years have passed since last update.

logrotateでファイル名を前日にする

Last updated at Posted at 2019-09-17

環境

  • Linux (Amazon Linux)

やりたいこと

ログファイルのsuffix(<filename>.YYYMMDDYYYMMDD部分)と、ファイルに含まれるログの日時を同じにしたい。
以下、nginx, unicorn での設定例。

設定

  • postrotateでファイル名(YYYYMMDD部分)を前日に変更するので、gzipはその後に行う。compressオプションは使わない。
/etc/logrotate.d/nginx
/var/www/shared/log/nginx.log {
    create 0664 your_user root # 新しいファイルを作成する(無ければ作る)時のパーミッション、オーナー、グループ
    daily                      # 日次でローテーションをする
    rotate 14                  # 14世代分ログを残す
    missingok                  # ログファイルがなくてもエラーを出さない
    ifempty                    # ログファイルが空でもローテーションする
    dateext                    # ローテーション後のファイルに、日時(-YYYYMMDD)のsuffixを付ける
    sharedscripts              # 複数指定したログファイルに対して、postrotateまたはprerotateで指定したコマンドを実行する
    postrotate                 # endscriptとの間に記述されたコマンドを、ログローテーション後に実行する
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`

        /bin/mv /var/www/shared/log/nginx.log-`date '+%Y%m%d'` /var/www/shared/log/nginx.log-`date '+%Y%m%d' -d '1days ago'`
        /bin/gzip /var/www/shared/log/nginx.log-`date '+%Y%m%d' -d '1days ago'`
    endscript
}
/etc/logrotate.d/unicorn
/var/www/shared/log/production.log /var/www/shared/log/unicorn.log {
    create 0664 your_user your_user
    daily
    rotate 14
    missingok
    ifempty
    dateext
    sharedscripts
    postrotate
        /etc/init.d/unicorn restart

        /bin/mv /var/www/shared/log/production.log-`date '+%Y%m%d'` /var/www/shared/log/production.log-`date '+%Y%m%d' -d '1days ago'`
        /bin/gzip /var/www/shared/log/production.log-`date '+%Y%m%d' -d '1days ago'`

        /bin/mv /var/www/shared/log/unicorn.log-`date '+%Y%m%d'` /var/www/shared/log/unicorn.log-`date '+%Y%m%d' -d '1days ago'`
        /bin/gzip /var/www/shared/log/unicorn.log-`date '+%Y%m%d' -d '1days ago'`
    endscript
}

その他

cronの設定

0 0 * * * root run-parts /etc/cron.daily

dry run

sudo logrotate -dv /etc/logrotate.d/nginx
sudo logrotate -dv /etc/logrotate.d/unicorn

実際に logrotate してみる

sudo logrotate -f /etc/logrotate.d/nginx
sudo logrotate -f /etc/logrotate.d/unicorn

以下のようなエラーが出る場合は、config (e.g. /etc/logrotate.d/nginx) で su <owner> <group> という形で指定するか、ディレクトリの owner/group を見直す。

sudo logrotate -f /etc/logrotate.d/nginx
error: skipping "/var/www/somewhere/log/nginx.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.
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1