やりたいこと
logrotate の設定ファイルで、下記のように指定したい。
/var/log/nanika_no_service/【"aiueo" から始まるログ以外】.log {
monthly
}
/var/log/nanika_no_service/aiueo.log {
daily
}
調べてみた結果
無理っぽい。
やむをえず、下記で妥協。
/var/log/nanika_no_service/[!a]*.log {
monthly
}
/var/log/nanika_no_service/a*.log {
daily
}
理由
https://github.com/logrotate/logrotate/blob/master/logrotate.c
https://github.com/logrotate/logrotate/blob/master/config.c
ソースコードによると、rotate するファイルの探索にはglobを使っているようです。
でもって、globの仕様も読んでみたのですが、「単一文字以外」のワイルドカードの案内はあれど、「複数文字以外」の書き方はありませんでした。
そんなわけで、logrotate.conf のファイル指定では
/var/log/nanika_no_service/【"aiueo" から始まるログ以外】.log {
# 略
}
上記のように書けない、というのが、今のところの結論です。
うまい方法はないものでしょうか。
経緯
同じディレクトリにあるログで、1種類のログだけ別条件で rotate したくなりました。それで調査したというわけです。
上の例だと aiueo.log
が、それに当たります。
でも、ちょっと待ってください。[!]
を使わず下記のように書けばいいのではないでしょうか。
/var/log/nanika_no_service/*.log {
monthly
}
/var/log/nanika_no_service/aiueo.log {
daily
}
そうですね。僕もそう予想しました。
ですが残念なことに NG です。
logrotate 設定では、重複があると上手く動作しません。上記のようにしてしまうと、aiueo.log
は *.log
にも含まれ、設定に重複があります。
このような条件だと、実行時にエラーになるか、aiueo.log
も *.log
の設定に従ってしまいます (設定順によって変わりますが、どの並びがどの動作になるかは、ちょっと忘れました)。
おわりに
この投稿では、logrotate の対象ログ指定で、「複数文字以外」の表現ができないか調べました。
残念ながら、今のところ実現方法を見つけられていません。
それではごきげんよう。