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 '
原因
- 権限不足: logrotateの実行ユーザーに書き込み権限がない
- ディスク容量不足: ローテーション先にスペースがない
- 設定ファイルの構文エラー: ワイルドカードやパスの記述ミス
- 親ディレクトリの権限が不適切: セキュリティチェックに失敗
- postrotateスクリプトのエラー: ローテーション後のコマンドが失敗
解決策
1. デバッグモードで原因を特定
| |
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. 親ディレクトリの権限を修正
| |
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
su myapp myapp
daily
rotate 14
compress
}
4. ディスク容量の確認
| |
5. logrotateのステータスファイルを確認
| |
関連エラー
Linux の他のエラー
この記事は役に立ちましたか?