# logrotate

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

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

## 出典

- [logrotate(8)](https://man7.org/linux/man-pages/man8/logrotate.8.html)
- [logrotate(8) (Debian)](https://manpages.debian.org/bookworm/logrotate/logrotate.8.en.html)

最終更新: 2026-10-08
URL: https://raincleaner.eu/ja/wiki/linux/logrotate
