Rain WikiWindows · Linux · Android

logrotate

サービスほとんどの Linux ディストリビューション

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

1一般的なルール

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

2copytruncate

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

3テスト

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で制限されます。

出典

  1. logrotate(8) man7.org
  2. logrotate(8) (Debian) manpages.debian.org

最終確認: