インフラ作業支援ラボInfra Support Lab← ガイド一覧← 戻る
問題発生時のトラブル解決ガイド

logrotateでログがローテーションされない原因と確認手順

このページの目的

ローテーションされない理由を、設定未読込み、対象外判定、権限・スクリプト失敗の3段階に分けます。最終的なゴールは、logrotate -dの判定理由を読み、修正すべき設定を特定することです。

最初にやること

最初に logrotate -d で設定の読込みと判定理由を確認します。強制実行から始めず、対象ログ、条件、状態ファイル、権限の順に確認します。

このページの対象:このページは「ログファイル自体が切り替わらない」場合が対象です。ローテーションは成功したのにアプリが新しいログへ書かない場合は、logrotate後にログを書かないガイドを確認してください。

logrotate設定を実行前に確認

設定を貼り付けて、対象パス、世代数、圧縮、create、copytruncate、postrotateなどの注意点を確認できます。

logrotate設定をレビュー

最初に判定理由を確認する

強制実行する前に、デバッグ出力を次の3つに分けて読みます。

sudo logrotate -d /etc/logrotate.conf

よくある表示・症状から原因を絞る

表示された文言は原因そのものではなく、確認範囲を絞る手掛かりです。「考えられる原因」と「最初の確認方法」を対応させて確認します。

エラー・症状考えられる原因最初の確認方法
error: bad rotation count / unknown option設定値の形式誤り、または未対応・誤記したディレクティブlogrotate -d の該当行と対象設定ファイルを確認
error: skipping "..." because parent directory has insecure permissions親ディレクトリが第三者書込み可能で、su指定もない親ディレクトリの所有者・権限とsu指定を確認
error: stat of ... failed: No such file or directory対象ログのパス誤り、またはログファイルがまだ存在しないls -l とlogrotate設定内の対象パスを照合
log does not need rotating期間・サイズ条件が未到達、または状態ファイル上で実行時期前-d出力の判定理由とstatusファイルを確認
error running shared postrotate scriptpostrotate内のコマンドが失敗し、非0で終了したpostrotateのコマンドを単体実行し終了コードを確認
duplicate log entry for ...同じログパスが複数の設定ブロックで指定されている/etc/logrotate.conf とinclude先を検索して重複を確認

原因を切り分ける確認手順

  1. 設定が読み込まれているか確認する

    grep -n "include" /etc/logrotate.conf ls -l /etc/logrotate.d/

    対象ファイルがinclude先にあり、ファイル名や権限が実装・ディストリビューションの要件を満たすか確認します。

  2. 対象ログと条件を確認する

    ls -lh /var/log/example/app.log sudo logrotate -d /etc/logrotate.conf

    dailysizeminsizenotifemptyなどの条件で対象外になっていないか確認します。

  3. 状態ファイルを確認する

    sudo grep -F '/var/log/example/app.log' /var/lib/logrotate/logrotate.status 2>/dev/null || true

    状態ファイルの場所は環境で異なります。前回ローテーション時刻を確認します。

  4. 権限と所有者を確認する

    namei -l /var/log/example/app.log ls -ld /var/log/example /var/log/example/app.log

    logrotateの実行主体と、sucreateの指定が整合しているか確認します。

  5. postrotateを単独確認する

    systemctl reload example.service systemctl status example.service --no-pager

    設定に書いた再読込処理が対象アプリで本当に有効か、単独で確認します。

確認結果から次の対応を決める

デバッグ結果主な対応
log does not need rotating期間・サイズ・状態ファイルを確認します。
error opening ... Permission denied親ディレクトリ、ファイル権限、suを確認します。
ローテーション済みだがアプリが旧ファイルへ書くpostrotateで再オープン通知するか、アプリ仕様に応じて方式を見直します。
新しいログへ書けないcreateのモード・所有者・グループを確認します。

この症状で多い原因

修正後の確認と再発防止

影響を理解したうえで、個別設定と専用の一時状態ファイルを使って検証すると、本番の状態ファイルを汚しにくくなります。

sudo logrotate -d /etc/logrotate.d/example sudo logrotate -v -s /tmp/logrotate-test.status /etc/logrotate.d/example
-fによる強制実行は、ログの切替、圧縮、削除、postrotateを実行する可能性があります。本番ログではバックアップと影響確認を先に行ってください。

logrotate設定を実行前に確認

設定を貼り付けて、対象パス、世代数、圧縮、create、copytruncate、postrotateなどの注意点を確認できます。

logrotate設定をレビュー