web-dev-qa-db-ja.com

なぜcreateとcopytruncateを一緒に使用する必要があるのですか?

The Geek Stuff にはlogrotateの例があります。 copytruncateは、元のログファイルをコピーして切り捨てます。

では、なぜcreateを使用する必要があるのでしょうか。元のログファイルは削除されていません。

/tmp/output.log {
  size 1k
  copytruncate
  create
  compress
  compresscmd /bin/bzip2
  compressext .bz2
  rotate 4
  maxage 100
}

別の質問は、maxage 100rotate 4ディレクティブは、4ローテーション後に古いログファイルを削除します。

42
Majid Azimi

それはおそらく間違いであり、そのチュートリアルの1つの例でのみ見られます。他のすべての例には、copytruncateオプションなしのcreateがあります。また、logrotateman page は、それが実際に無視されることを示します

copytruncate

古いログファイルを移動してオプションで新しいログファイルを作成するのではなく、コピーを作成した後、元のログファイルをゼロサイズに切り捨てます。一部のプログラムにログファイルを閉じるように指示できないため、以前のログファイルへの書き込み(追加)を永久に続ける可能性がある場合に使用できます。ファイルのコピーと切り捨ての間に非常に小さなタイムスライスがあるため、一部のログデータが失われる可能性があることに注意してください。このオプションを使用すると、古いログファイルがそのまま残るため、作成オプションは無効になります。


maxageについては、たとえば、ローテーション期間(日/週/月)が少ない場合に空になる可能性のあるログファイルの場合に役立つと思います— notifemptyを使用すると、空のログファイルはローテーションされませんなので、ローテーションされたファイルが古すぎる可能性があります。

60
Marki555