logrotate で次のように重複するパターンを指定し、
/etc/logrotate.d/ore.conf
/var/log/ore/zzz.log {
weekly
rotate 3
}
/var/log/ore/*.log {
daily
rotate 10
}
さらに次の通りにログがあるときに、
mkdir -p /var/log/ore
touch /var/log/ore/aaa.log
touch /var/log/ore/zzz.log
logrotate を実行すると、
logrotate --debug /etc/logrotate.conf
次のように表示されました。
rotating pattern: /var/log/ore/zzz.log weekly (3 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/ore/zzz.log
log does not need rotating
rotating pattern: /var/log/ore/*.log after 1 days (10 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/ore/aaa.log
log does not need rotating
logrotate の設定を次のように変更すると、
/var/log/ore/*.log {
daily
rotate 10
}
/var/log/ore/zzz.log {
weekly
rotate 3
}
次のように結果がかわりました。
rotating pattern: /var/log/ore/*.log after 1 days (10 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/ore/aaa.log
log does not need rotating
considering log /var/log/ore/zzz.log
log does not need rotating
rotating pattern: /var/log/ore/zzz.log weekly (3 rotations)
empty log files are rotated, old logs are removed
No logs found. Rotation not needed.
この動きから推測するに、
「重複するパターンがある場合は最初の検索で見つかったログはは以降の検索で見つかっても除外される」
ということだと考えました。
が、ぜんぜん違いました。
logrotate の設定を次のように変更して、
/var/log/ore/bbb.log {
weekly
rotate 3
}
/var/log/ore/*.log {
daily
rotate 10
}
そしてログファイルを次のように作成すると、
mkdir -p /var/log/ore
touch /var/log/ore/aaa.log
touch /var/log/ore/bbb.log
touch /var/log/ore/zzz.log
次の結果になりました。
rotating pattern: /var/log/ore/bbb.log weekly (3 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/ore/bbb.log
log does not need rotating
rotating pattern: /var/log/ore/*.log after 1 days (10 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/ore/aaa.log
log does not need rotating
zzz.log
が無い?
よく見たら先頭の方でエラーが表示されていました。
error: ore.conf:5 duplicate log entry for /var/log/ore/bbb.log
つまりこれは下記の動きになっています。
-
/var/log/ore/bbb.log
を検索-
/var/log/ore/bbb.log
を追加
-
-
/var/log/ore/*.log
を検索-
/var/log/ore/aaa.log
を追加 -
/var/log/ore/bbb.log
を追加- がしかし重複しているので無視して次のパターンに
-
そのため bbb.log
よりも後に発見される zzz.log
は抜けてしまいます。
結論、logrotate で重複するパターンは指定してはならない。