LoginSignup
2
5

More than 5 years have passed since last update.

Linux でログファイルをローテートする

Posted at

 Linux サーバ上で稼働しているアプリケーションのログをローテートしたときのメモ。
 伝聞調で書いてるところは、特に他の文献の存在を示してない限り、man logrotate の内容によります。

環境

Amazon EC2 Linux(2018/11/28 現在)

やり方

 Linux にデフォルトで備わっている logrotate の機能を使いました。
 様々な条件を指定できるので、大概の場合に要件を満たせそうかと思います。
 通常、デイリーのクーロンジョブとして稼働するとのことです(サイズ指定でのローテートする場合はその限りではない)。

logrotate 機能

 文字通りログをローテートする機能なのですが、その実態はコマンド logrotate と設定ファイルに分かれています。
 設定ファイルに記述された対象ファイルについて、記述された設定通りの処理を行います。
 設定できる条件は、man logrotate の結果か、man ページに詳しいため、ここでは割愛します。
 man logrotate の結果に記載されているサンプル設定は以下の通りです。

/var/log/messages {
    rotate 5
    weekly
    postrotate
        /usr/bin/killall -HUP syslogd
    endscript
}

 大体意味が分かりますね。
 ローテート対象は /var/log/messages.log です。
 1 週間に 1 回のローテートであり、5 週間(5 ローテート)の結果が残るため、現時点で更新されているファイルを含め、ファイル数は合計 6 つになります。
 ローテート後に postrotate で指定されているコマンドが実行されます。
 グローバルオプションも指定できます。ただし、オプションの適用優先度には注意が必要です。
 ローカルオプションはグローバルオプションを上書きし、同じローカルオプション(恐らく)を指定したときは、後から指定されたものが前に指定されたものを上書きするとのことです。

設定ファイルの場所

 Linux 全般で共通なのかは知らないのですが、私が確認した環境では /etc 配下にあり、以下のようになっています。

/etc/
  ┝ logrotate.conf
  ┝ logrotate.d/
  │   ┝ message
  │   ┝ ...
 ...

 他の文献を読んだ感じでは、logrotate.conf にまとめて設定を記述してもいいし、logrotate.d 配下にそれぞれ設定ファイルを作っていってもよいようです。
 man logrotate の結果を隅々まで読んだわけではないので、どっかに書いてあるかもですが(動作確認した方が楽そう)。

動作確認

 以下のような logrotate コマンドを叩いて手動ローテートさせてみましょう。
 logrotate -v -f /etc/logrotate.d/maillog
 -v は、冗長モードの指定で、処理内容が標準出力に出てきます。
 -f は、設定ファイルにもとづくローテートの要否を判定せず(強制)ローテートします。新しい設定を導入したときや、古いファイルを手動削除したときに、新しいファイルを作成しログ出力を正常に継続できるようにするために便利とのこと。
 他の文献によると、以下のコマンドで特定の設定ではなくすべての設定についてローテートさせられるとのこと(動作は未確認です)。
 logrotate -v /etc/logrotate.conf

参考文献

2
5
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
2
5