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