web-dev-qa-db-ja.com

logrotate:デフォルトを設定してオーバーライドする方法は?

/tmpでlogrotate構成をテストしています。私は...したい

  1. テスト構成ファイル/tmp/*.logを使用して、/tmp/logrotate.confファイルのデフォルトのログローテーションポリシーを構成するには
  2. 別のlogrotate構成テストファイルで構成された別のポリシーで特定のログファイル/tmp/special.logを処理するには:/tmp/logrotate.d/included

しかし、私の構成に対するlogrotateの応答は、次のようになります。

error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

私は何を変えるべきですか?

これが私の/tmp/logrotate.confです

compress
missingok
notifempty
size 512k
copytruncate
rotate 2
su

# here's my attempt at applying the default policy to all /tmp/*.log
/tmp/*.log {}

# and here I intend to include any overrides
include /tmp/logrotate.d/included

そしてここに/tmp/logrotate.d/included

/tmp/special.log {
    size 300
}

これがデバッグ出力です。

$ Sudo logrotate -d ./logrotate.conf

reading config file ./logrotate.conf
including /tmp/logrotate.d/included
reading config file /tmp/logrotate.d/included
error: /tmp/logrotate.d/included:1 duplicate log entry for /tmp/special.log

Handling 2 logs

rotating pattern: /tmp/*.log  524288 bytes (2 rotations)
empty log files are not rotated, old logs are removed
considering log /tmp/normal.log
  log does not need rotating
considering log /tmp/special.log
  log does not need rotating

rotating pattern: /tmp/special.log  300 bytes (2 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
  1. マニュアルページによると、「後の設定ファイルは前のファイルで指定されたオプションを上書きする可能性があるため、logrotate設定ファイルをリストする順序が重要だ」と思ったので、エラーは私を驚かせます。
  2. パターン/tmp/special.logを処理するときに、ログが見つからなかったと最後に表示されるのはなぜですか?ファイル/tmp/special.logが存在し、300バイトを超えています。
3
user1011471

logrotateの開発者は、ログファイル定義の重複を意図的に禁止しているため、より具体的なルールは構成の一般的なルールに従うことができますが、ログファイルパスの重複はエラーを生成します。これは、logrotateルールを含むパッケージメンテナとそれらのパッケージのユーザーの利益のためであり、重複が明らかになり、報告することができます。

特定のルールと一般的なルールのログファイル必須が同じディレクトリにある場合(それらを移動するように再構成できますか?)、それぞれの一般的なルールに対する明示的な除外を作成して維持する必要があります重複するパス。 logrotate.confはこれを明示的に提供していませんが、logrotateがShellextglob glob-extensionsが有効になっている環境で実行されている場合、除外が可能です。 crontablogrotateが実行されるのと同じルート環境でshopt extglobを実行すると、extglobが有効になっているかどうかを確認できます。また、必要に応じて、shopt -s extglobを使用して明示的に有効にすることもできます。

extglobを有効にすると、次のような構成が可能になります。

/tmp/!(special).log {}

...これにより、より具体的な後のルールとの重複が防止され、エラーが回避されます。

2
javabrett