MeWrite Docs

logrotate: error creating output file

logrotateがログファイルのローテーション時にエラーを起こす場合の対策

概要

logrotateがログファイルのローテーション処理中にエラーを起こす場合の問題です。権限不足、ディスク容量不足、設定ファイルの構文エラーなどが原因で発生し、放置するとディスクを圧迫する原因になります。

エラーメッセージ

error: error creating output file /var/log/myapp/myapp.log.1.gz: Permission denied
error: skipping "/var/log/myapp/myapp.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root")
error: stat of /var/log/myapp/*.log failed: No such file or directory
error: error running shared postrotate script for '/var/log/nginx/*.log '

原因

  1. 権限不足: logrotateの実行ユーザーに書き込み権限がない
  2. ディスク容量不足: ローテーション先にスペースがない
  3. 設定ファイルの構文エラー: ワイルドカードやパスの記述ミス
  4. 親ディレクトリの権限が不適切: セキュリティチェックに失敗
  5. postrotateスクリプトのエラー: ローテーション後のコマンドが失敗

解決策

1. デバッグモードで原因を特定

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# デバッグモード(実際にはローテーションしない)
sudo logrotate -d /etc/logrotate.d/myapp

# 強制実行(デバッグ付き)
sudo logrotate -dv /etc/logrotate.conf

# 強制ローテーション(実行)
sudo logrotate -f /etc/logrotate.d/myapp

# 詳細出力で実行
sudo logrotate -v /etc/logrotate.conf

2. 設定ファイルの修正

# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 myapp myapp
    sharedscripts
    postrotate
        systemctl reload myapp > /dev/null 2>&1 || true
    endscript
}

主要なディレクティブ:

# 基本設定
daily           # 毎日ローテーション
weekly          # 毎週
monthly         # 毎月
rotate 14       # 14世代保持
compress        # gzip圧縮
delaycompress   # 1回遅延して圧縮

# エラー回避
missingok       # ファイルがなくてもエラーにしない
notifempty      # 空ファイルはローテーションしない
copytruncate    # コピーしてから切り詰め(サービス再起動不要)

# 権限指定
create 0640 myapp myapp   # ローテーション後のファイル権限
su myapp myapp             # 実行ユーザーを変更

3. 親ディレクトリの権限を修正

1
2
3
4
5
6
7
8
# ディレクトリの権限確認
ls -ld /var/log/myapp/

# 適切な権限に変更
sudo chown root:myapp /var/log/myapp/
sudo chmod 750 /var/log/myapp/

# またはlogrotate設定で su ディレクティブを使用
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
    su myapp myapp
    daily
    rotate 14
    compress
}

4. ディスク容量の確認

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# ディスク使用量確認
df -h /var/log/

# 大きなログファイルを特定
sudo du -sh /var/log/* | sort -rh | head -10

# 古いローテーション済みファイルを手動削除
sudo rm /var/log/myapp/myapp.log.*.gz

# 現在のログを切り詰め(内容は失われる)
sudo truncate -s 0 /var/log/myapp/myapp.log

5. logrotateのステータスファイルを確認

1
2
3
4
5
6
# ステータスファイルの確認(最終ローテーション日時)
cat /var/lib/logrotate/status

# ステータスファイルが壊れている場合はリセット
sudo rm /var/lib/logrotate/status
sudo logrotate /etc/logrotate.conf

関連エラー

Linux の他のエラー

最終更新: 2026-02-03