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は、時期が来ていなくても強制的にローテーションを実行します。
ルールの追加とテスト方法
/etc/logrotate.d/myappを作成し、ログパスとディレクティブ(例:weekly、rotate 4、compress、missingok、notifempty)を記述します。- ドライラン(テスト実行):
sudo logrotate -d /etc/logrotate.d/myapp - 出力結果が正しければ、強制的に1回ローテーションを実行します:
sudo logrotate -f /etc/logrotate.d/myapp - 結果を確認します: ls -lでログディレクトリを確認してください。
注意点
- パスのパターンが誤っていると、他のプログラムのログをローテーションしたり削除したりする可能性があります。
- systemdジャーナルによって管理されているログは、logrotateではなくjournald.confで制限されます。
関連記事
- journalctl と systemd ジャーナルjournalctl を使用したログの読み取り方法、ジャーナルが使用している容量の確認方法、および --vacuum オプションを使用して安全に縮小する方法について解説します。
- du および ncdu を使用したディスク使用量の確認Linux ディスクを圧迫している原因を、du および対話型の ncdu を使用して特定する方法を解説します。同一ファイルシステム内に留まるオプションについても説明します。
- cron と crontabcron がどのようにスケジュールされたジョブを実行するか、crontab の5つの時間フィールド、システム cron ファイルの場所、および systemd タイマーとの比較について解説します。
出典
- logrotate(8) man7.org
- logrotate(8) (Debian) manpages.debian.org
最終確認: