はい、適切な方法があります。ログをまったく消去しません。あなたは回転し、それらを。ローテーションでは、ログ出力を同じ名前の新しいファイルに切り替え、以前のN個のログファイルをN個の関連ファイル名のセットの下に保持します。
ログをローテーションする方法は、そもそもログを書き込む方法によって異なります。 これは見過ごされがちな点です。ここでの回答のいくつかは少なくともそれに触れており、一部のロギングプログラムはログファイルのオープンファイル記述子を保持しているため、ファイルを削除するだけではスペースが解放されず、実際には出力を新しいログファイルに切り替えることさえありません。
たとえば、ログファイルを書き込むプログラムmultilog
がdaemontools
packageからのものである場合、ログをローテーションするために何もしませんcron
。手動のスクリプトもジョブもありません。multilog
ログ出力はディレクトリへの出力であり、それ自体がそのディレクトリ内のN個のログファイルの自動回転およびサイズ制限セットを維持することを伝えるだけです。
別の例として、ログファイルを書き込むプログラムsvlogd
がrunit
パッケージからのものである場合、ほぼ同じことが当てはまります。ディレクトリでツールをポイントする以外は、何もしません。それ自体は、そのディレクトリ内のN個のログファイルの自動回転およびサイズ制限セットを維持します。
rsyslog
ログファイルの書き込みに使用している場合、ログファイルが特定のサイズに達してスクリプトを実行した後に、ログ記録プログラムを停止するように指示できます。実際にログファイルの名前を変更し、合計サイズの制約に基づいて古いログファイルを削除するには、スクリプトの内容を記述する必要がありますが、少なくともログプログラムはファイルを閉じ、これが行われている間はログの書き込みを一時停止しました。
syslog-ngなどのロギングプログラムや、別の回答で言及されているようなツールで例示されているようにsyslogd
、ログをローテーションする古い方法は、やや偶然です。定期的にログファイルの名前を変更するジョブを実行し、ロギングデーモンを再起動します(実行中のデーモンスーパーバイザーを使用)。もちろん、これに関する問題は、全体的なサイズの上限を強制しないことです。遅い週には、N個の非常に小さい日次ログファイルを取得できますが、忙しい日に、サイズ制限を十分に超える1つの非常に大きなログファイルを取得できます。 logrotate
djangofan
cron
これが、ファイルサイズ設定オプションのようなより優れたツールがmultilog
ありsvlogd
、実際にログファイルサイズ自体を実際にチェックする理由です。世界は、cron
ジョブまたはlogrotate
デーモンでスケジュールに基づいてログをポーリングすると、サイズが間違っているためにウィンドウが残され、これらのチェックを行う適切な場所があり、管理者が定義したサイズの上限を厳密に適用することを学びましたログファイルは、それらが存在するパーティションを飲み込むことはなく、実際にファイルを最初に書き出しているプログラム内にあります。