前島と申します。こんばんは。 山田さんのメールを読んでnewsyslogの動作に興味を持ちました。 そこで、FreeBSD 6.1-RELEASEのnewsyslogのソースを持ってきて、 デバッグオプションを付けてmakeした物を使って動作を調べて みました。
# cd /usr/src/usr.sbin/newsyslog # make COPTS="-g -O0" # gdb ./newsyslog テスト用のログファイルを生成し、/etc/newsyslog.confのwhen条件、 size条件を調整してnewsyslogを何度か実行してみたところ、この newsyslogは次のように動作しました。 1. when条件が不成立のときはsize条件が判定されることなく、 ローテートがスキップされました。 newsyslog.cのdo_entry()において、491行から530行までの ifブロックでwhen条件が評価されています。ここでwhen条件が 不成立の場合には即座にreturnし、size条件の評価(547行)は 実行されませんでした。 2. またwhen条件が成立したときには、size条件の成立、不成立に かかわらずローテートが行われました。 size条件が成立する場合は547行のif条件が成立することに より、またsize条件が成立しない場合でも551行のif条件が 成立することにより、いずれの場合にもローテート実行 フラグがセットされました(ent->rotate = 1)。 つまり、newsyslogは「size条件またはwhen条件のいずれかが成立 した時にローテートを実行する」ようには出来ていないのだと思い ます。