- 締切済み
logrotateのリネーム後のファイル生成
ログローテート のツールとクーロンを利用して、ログファイルを定期的にローテートさせます。 以下の順でローテートさせます。 (1)ログファイルをリネームする (例access.log→access_20041001.log) (2)新たにログファイルを生成させています。 (例access.log) そこで、質問ですが、(1)と(2)の間にログを出力する間はわずかでも間隔があるのでしょうか? その間にログを出力させようとしたときは、(2)のファイルが未だ存在が存在しないので、出力できないのでしょうか? 以上のことは、起こりえないのでしょうか? 以下にlogrotate.confの一部を示します。 /home/review/log/review/access.log { daily create 0644 review review rotate 1 postrotate EXT=`date --date '1 days ago' +%Y%m%d` for f in $1; do mv $f.1 /home/review/log/review/access_$EXT.log; done endscript }
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
もし、ログ発生の都度にログファイルをオープン、ライト、クローズしているなら、ご心配のようなタイミングが生じますが、アペンドライトのオープン時にはファイルが無ければ作られ、その後、create 0644 review reviewの記述によって、chmod や chown が行われるので大丈夫です。 でも多くのデーモンプログラムでは、ログファイルをオープンしっぱなしで、ログ発生時にはライトだけ行っています。そのためリネームしてもそのままリネーム後のファイルに書き続けます。またSIGHUPシグナルを受け取るとログファイルのクローズ・オープンをし直すように作ってあるので、ログファイルのリネーム、作成後に、kill -HUPすると新しいファイルに書かれるようになります。 いずれのケースでも大丈夫ですが、初心者が作ったようなプログラムだと駄目なものもあるかもしれません。
- xjd
- ベストアンサー率63% (1021/1612)
普通、ログファイルをローテートするときは、そのログファイルに 吐き出しているサービスを止めるのが一番安全です。 (1)サービスを止める (2)ログファイルをローテートする (3)サービスを起動する また、場合によってはログファイルが存在しないと、起動できない サービスもありますので、 touchコマンド等で、0バイトのログファイルを作成しておく必要もあります。 (1)サービスを止める (2)ログファイルをローテートする (3)ログファイルを作成する(touch ログファイル名) (4)サービスを起動する さらにもうひとつ、 ローテート後に、作成したログファイルの所有者・権限も、ちゃんと 設定する必要があります。