logrotate が正しく実行されない場合に logrotate の警告またはエラーをデバッグする方法
Environment
- Red Hat Enterprise Linux (RHEL) (すべてのバージョン)
Issue
logrotate が正しく実行されない場合に、logrotate の警告またはエラーをデバッグするにはどうすればよいですか?
Resolution
logrotate.status
ファイルを確認する
-
logrotate.status
ファイルを調べて、どのファイルがローテーションされたかを確認します。# cat /var/lib/logrotate/logrotate.status
デバッグモードで logrotate を実行する
-
デバッグモードで
logrotate
コマンドを手動で実行し、エラーを確認します。# /usr/sbin/logrotate -d /etc/logrotate.conf
問題の原因となっている設定ファイルを特定する
- デバッグ出力で報告されたエラーに応じて、
/etc/logrotate.conf
の設定に関する問題、/etc/logrotate.d/
の設定ファイルの問題、またはデバッグ出力で報告されたその他の問題を修正します。
デバッグモードで logrotate を再実行する
# /usr/sbin/logrotate -d /etc/logrotate.conf
エラーが表示されなければ、logrotate は正しく動作するはずです。
異なる logrotate インスタンスでの logrotate.status
ファイルの共有を避ける
- システムには、同じ
logrotate.status
ファイルを共有する 複数 の logrotate 設定インスタンスがある場合があります。これにより競合が発生します。 - 各設定インスタンスには、それぞれ異なる
logrotate.status
ファイルが必要です。競合により、予期しない問題が発生する可能性があります。 -
--state /path/to/status_filename
オプションを追加して、各 logrotate 設定を分離します。$ cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf <<=== This use default '/var/lib/logrotate/logrotate.status'
[..omit..]
$ cat /etc/cron.hourly/logrotate_rsyslog
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate_rsyslog.conf <<=== Also use default '/var/lib/logrotate/logrotate.status', CONFLICT!
[..omit..]
Root Cause
この例の根本原因は、/var/log/conman.old
ディレクトリーが欠落していることです。以下のように、このディレクトリーを作成すると問題が解決します。
~~~
# mkdir /var/log/conman.old
~~~
Diagnostic Steps
-
以下を実行して、cron サービスが正しく実行されているか確認します。
# systemctl status crond.service
-
/var/log/messsages
ファイルに何らかの警告やエラーが作成される場合があります。以下はその例です。logrotate: ALERT exited abnormally with [1]
-
logrotate
コマンドには引数-d
があり、これによりデバッグモードがオンになります。デバッグモードでは、ログや logrotate 状態ファイルには変更は加えられません。必要に応じて、デバッグ出力をファイル (/tmp/logrotate.debug
など) にリダイレクトできます。これはデバッグに非常に役立ちます。# /usr/sbin/logrotate -d /etc/logrotate.conf 2> /tmp/logrotate.debug
-
デバッグの出力例:
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file acpid
reading config info for /var/log/acpid
reading config file conman
reading config info for /var/log/conman/*
olddir is now /var/log/conman.old/
error: conman:21 error verifying olddir path /var/log/conman.old/: No such file or directory
This solution is part of Red Hat’s fast-track publication program, providing a huge library of solutions that Red Hat engineers have created while supporting our customers. To give you the knowledge you need the instant it becomes available, these articles may be presented in a raw and unedited form.
Comments