金子と申します。 On Tue, 16 Sep 2003 00:02:28 +0900 Koyama <mlac@xxxxxxxxxxxx> wrote: > logrotate.conf では、logrotated.d フォルダにある syslog > などのファイルの /bin/kill -HUP などのコマンドは、毎日実行されて > いるのでしょうか? > だとすると、ローテーションも毎日実行されていると考えて良いのでしょうか? > もしそうであれば、logrotate.conf の weekly はどのような意味を > 持つのでしょうか? > また、postrotate コマンドも実行されているのでしょうか? /etc/cron.daily/logrotate から logrotateが起動されると、 logrotate.conf または、そのファイルでincludeしている /etc/logrotate.d ディレクトリ下の各設定ファイルで rotation 対象に指定しているファイル ごとに、stateファイル、すなわち /var/lib/logrotate.status に記録している、前回の rotate 処理実行日付を見に行き、そこから、 指定された日数(デフォルトでは logrotate.conf で指定している weekly つまり1週間)経過していれば、rotate の処理を行う。 という動作をします。 例えば、ワタシの手元にある /var/lib/logrotate.statusファイルには logrotate state -- version 2 "/var/log/messages" 2003-9-14 "/var/log/secure" 2003-9-14 "/var/log/maillog" 2003-9-14 "/var/log/spooler" 2003-9-14 "/var/log/boot.log" 2003-9-14 "/var/log/cron" 2003-9-14 "/var/log/wtmp" 2003-9-4 と書かれています。設定ファイルによれば、次回の rotate 処理は、 /var/log/wtmp はmonthlyなので10/4以降、その他のファイルはweekly なので9/21以降、ということになります。 9/20までは、logrotateは毎日呼び出されますが結果としては *何もしません* 。 9/21に /etc/cron.daily/logrotate が呼び出されると、messagesから cronまでの各ファイルがrotateされた後で、 /var/lib/logrotate.status ファイルに書かれている前回の処理日付が2003-9-21に書き変わります。 というふうに、いずれのファイルも、*期日が来るまでは* rotate 処理を 行いません。 postrotate の処理も実施しません。 なので、 > logrotate スクリプト(/usr/sbin/logrotate /etc/logrotate.conf) > のコマンド指定をcron.daily ではなく、cron.weekly へ移動しても > 問題ないものでしょうか? Vine Linuxの logrotate 周りのデフォルト設定では、weeklyより短い 頻度で rotate させているファイルはないので、 logrotate スクリプト をcron.weeklyに移してもやることは変わらないはずです。チェックが 毎日から週1回に変わるので、次の回はもしかしたら数日遅れるかも 知れませんが、それ以降はやはり週1回 logrotate するでしょうし、 wtmpは月1回 rotate するでしょう(未確認)。 以下、個人的な意見ですが: 将来、どれかのツールに大量のログを吐き出すような設定変更を加えて、 rotateの間隔を週1回から毎日とかに変更したくなる、あるいは サイズ制限を加えたくなるかもしれない、という可能性を考えると、 logrotate スクリプトは cron.daily にそのままおいておく方が実用的 かと思います。 logrotate 自体は、毎日実行したところで、大した負荷があるような処理 とは思えませんし…。 # man logrotate すれば、もっと詳しい説明があります。 以上、参考になれば幸いです。 -- 金子誠司 (KANEKO Seiji)