Help us understand the problem. What is going on with this article?

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

More than 3 years have passed since last update.

概要

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

K_Yagi
webサービス作ってます 主な使用言語はruby
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした