ログの見方・journalctlに続き、この記事ではlogrotateを使ったログファイルの自動管理を解説します。設定を一度作ってしまえば、ディスク満杯の心配がなくなります。
logrotateとは
logrotateはLinux標準のログローテーションツールです。cronから毎日自動実行され、古いログを圧縮・削除・リネームします。設定ファイルは /etc/logrotate.conf(グローバル設定)と /etc/logrotate.d/(サービス別設定)で管理されます。
設定ファイルの書き方
# /etc/logrotate.d/myapp の例
/var/log/myapp/*.log {
daily # ローテーション頻度(daily/weekly/monthly)
rotate 14 # 14世代分保持
compress # 古いログをgzipで圧縮
delaycompress # 最新の1世代は圧縮しない(アプリが書き込み中の可能性)
missingok # ログファイルがなくてもエラーにしない
notifempty # 空ファイルはローテーションしない
dateext # ファイル名に日付を付ける(app.log.2026-03-15)
create 0640 myuser mygroup # ローテーション後に新ファイルを作成
postrotate
# ローテーション後にサービスに通知(ログファイルを再オープンさせる)
systemctl reload myapp > /dev/null 2>&1 || true
endscript
}
主要なオプション一覧
| オプション | 説明 |
|---|---|
| daily/weekly/monthly | ローテーション頻度 |
| size 100M | ファイルが100MB超えたらローテーション |
| rotate N | N世代分保持(古いものから削除) |
| maxage N | N日以上前のログを削除 |
| compress / nocompress | gzip圧縮の有無 |
| copytruncate | 元ファイルをコピーしてから切り詰め(アプリ再起動不要)。コピーと切り詰めの間にごく短い時間があり、その間に書かれたログが失われる可能性がある |
| sharedscripts | postrotateスクリプトを1回だけ実行 |
動作確認とデバッグ
# ドライラン(実際には実行しない・設定の確認)
$ sudo logrotate -d /etc/logrotate.d/myapp
# 強制的にローテーションを実行(テスト用)
$ sudo logrotate -f /etc/logrotate.d/myapp
# 全設定を一括で確認
$ sudo logrotate -d /etc/logrotate.conf
# 実行履歴を確認
$ cat /var/lib/logrotate/status | grep myapp
Nginxのlogrotate設定例
# /etc/logrotate.d/nginx(デフォルト設定の確認・カスタマイズ)
/var/log/nginx/*.log {
daily
missingok
rotate 52
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
# nginx にシグナルを送ってログファイルを再オープン
if [ -f /var/run/nginx.pid ]; then
kill -USR1 $(cat /var/run/nginx.pid)
fi
endscript
}
まとめ
- 設定は
/etc/logrotate.d/にサービスごとに作成する logrotate -dでドライランして設定を確認してから本番適用compressとdelaycompressの組み合わせが基本postrotateでサービスに通知してログファイルを再オープンさせるcopytruncateはアプリ再起動なしでローテーションできるが、瞬間的にログが消える可能性あり
📋 Linuxサーバー運用・管理チェックリスト完全版でPhase 2の全要点を確認できます。



コメント