LoginSignup
80

More than 5 years have passed since last update.

ログローテーションするためのlogrotate設定とちょっとしたtips

Last updated at Posted at 2015-10-14

概要

Linuxの場合ログローテーションはlogrotateというrpmを用います
だいたいのディストリビューションには最初から入っているはずです。

設定もとても簡単で、ローテーションしたいファイルの指定と、
ローテーションする際の設定を数行書けば完了です。

準備

ログローテーションにはcronを用いてるため
crondが動いているかどうか確認

$ service crond status

ローテーション設定

/etc/logrotate.conf/etc/logrotate.d/配下のファイルによって設定します。
おそらく/etc/logrotate.d/配下に最初から幾つか設定ファイルがあるのでそれらも参考にすると良いでしょう。

例えばnginxの各種ログファイルのローテーション設定は

/var/log/nginx/*log {
    create 0644 nginx nginx
    daily
    rotate 10
    missingok
    notifempty
    compress
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

みたいな感じで設定できます。

使用できる主なコマンド

  • weekly ログローテーションを週毎に行う。
  • rotate 4 ログローテーションの世代数を4個に設定。
  • missingok 指定のログファイルが実在しなかったとしてもエラーを出さずに処理続行。
  • notifempty ログファイルが空ならローテーションしない。
  • copytruncate copy の動作を行った後、元のログファイルの内容を消去する。
  • create 0644 fuga fuga ローテーションを行った後、代わりに空の新規ログファイルを作る。権限・グループ・ユーザを指定可能
  • postrotate~endscript postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行
  • size ファイルサイズ ログファイルが指定したファイルサイズ以上になったらローテーションする

その他設定項目は→@IT:logrotateの設定ファイルで指定できる主なコマンド

logrotateの動作確認

ShellScript - logrotateを手動実行 - Qiita

# デバッグ
/usr/sbin/logrotate -fd /etc/logrotate.d/nginx

# 実行
/usr/sbin/logrotate -f /etc/logrotate.d/nginx

TIPS

ログを扱うアプリケーション側でログファイルを再openできない・するのが面倒

logrotateの通常の動作としては

hoge.log

があった場合、これをローテーションさせるには
hoge.log.1にリネームし、新たにhoge.logを生成します。

ただしデーモンで動作しているアプリケーション等の場合、開いているファイルはhoge.log.1なので、
hoge.logを再openしてあげる必要があります。

例えばUnicornの場合USR1シグナルを送信するとログファイルを再度openしてくれますが、
こういった便利なシグナルやコマンドが用意されていない場合はcopytruncateを用います。

copytruncateを記述しておくと
hoge.logがあった場合に、これをコピーしたものをローテーションのファイルhoge.log.1とし、
オリジナル(hoge.log)の中身を削除します。
つまりhoge.logを開きっぱなしにしておけばokということです!

参考

Nginx - ログローテーション設定! - mk-mode BLOG
Ruby on Rails - Unicorn のログローテーション! - mk-mode BLOG

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
80