Translated message

A translation of this page exists in English.

Warning message

This translation is outdated. For the most up-to-date information, please refer to the English version.

logrotate が正しく実行されない場合に logrotate の警告またはエラーをデバッグする方法

Solution Verified - Updated -

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