/tmp
でlogrotate構成をテストしています。私は...したい
/tmp/*.log
を使用して、/tmp/logrotate.conf
ファイルのデフォルトのログローテーションポリシーを構成するには/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.
/tmp/special.log
を処理するときに、ログが見つからなかったと最後に表示されるのはなぜですか?ファイル/tmp/special.log
が存在し、300バイトを超えています。logrotate
の開発者は、ログファイル定義の重複を意図的に禁止しているため、より具体的なルールは構成の一般的なルールに従うことができますが、ログファイルパスの重複はエラーを生成します。これは、logrotateルールを含むパッケージメンテナとそれらのパッケージのユーザーの利益のためであり、重複が明らかになり、報告することができます。
特定のルールと一般的なルールのログファイル必須が同じディレクトリにある場合(それらを移動するように再構成できますか?)、それぞれの一般的なルールに対する明示的な除外を作成して維持する必要があります重複するパス。 logrotate.conf
はこれを明示的に提供していませんが、logrotate
がShellextglob
glob-extensionsが有効になっている環境で実行されている場合、除外が可能です。 crontablogrotateが実行されるのと同じルート環境でshopt extglob
を実行すると、extglob
が有効になっているかどうかを確認できます。また、必要に応じて、shopt -s extglob
を使用して明示的に有効にすることもできます。
extglob
を有効にすると、次のような構成が可能になります。
/tmp/!(special).log {}
...これにより、より具体的な後のルールとの重複が防止され、エラーが回避されます。