Rain Wiki · Linux

logrotate

logrotateの機能、/etc/logrotate.confおよび/etc/logrotate.dでの設定方法、ルールを安全にテストする方法について解説します。

Linux · Rain Wiki

logrotateは、ログファイルがディスクを圧迫しないようにローテーション、圧縮、削除を行うLinuxユーティリティです。通常はsystemdタイマーまたはcronジョブによって1日1回実行され、/etc/logrotate.confと/etc/logrotate.d/内のパッケージごとのルールを読み込みます。

一般的なルール

ルールでは、1つ以上のログファイル名と、dailyやweekly(頻度)、rotate 7(保持する古いファイルの数)、compress(古いファイルをgzip圧縮)、missingok(ファイルが存在しなくてもエラーにしない)、notifempty(空のログはスキップ)、postrotate ... endscript(ローテーション後に実行するコマンド。例:ログの再オープン)といったディレクティブを指定します。

copytruncate

一部のプログラムは、開いたままの同じファイルに書き込み続けます。copytruncateはファイルを移動するのではなく、ログをコピーしてから元のファイルを切り詰める(truncate)ため、プログラムはファイルハンドルを保持し続けます。ただし、コピー中に書き込まれた数行が失われる可能性があります。

テスト

'logrotate -d /etc/logrotate.conf'を実行するとデバッグモードになり、実行される内容が表示されるだけで実際には処理されません。'-f'は、時期が来ていなくても強制的にローテーションを実行します。

ルールの追加とテスト方法

  1. /etc/logrotate.d/myappを作成し、ログパスとディレクティブ(例:weekly、rotate 4、compress、missingok、notifempty)を記述します。
  2. ドライラン(テスト実行): sudo logrotate -d /etc/logrotate.d/myapp
  3. 出力結果が正しければ、強制的に1回ローテーションを実行します: sudo logrotate -f /etc/logrotate.d/myapp
  4. 結果を確認します: ls -lでログディレクトリを確認してください。

注意点

  • パスのパターンが誤っていると、他のプログラムのログをローテーションしたり削除したりする可能性があります。
  • systemdジャーナルによって管理されているログは、logrotateではなくjournald.confで制限されます。

出典

最終更新: 2026-10-08

関連記事