ロギング情報をログファイルに継続的に書き込むLinuxアプリケーションがあります。 /var/log/application.log
。アプリケーションがファイルを自動的にローテーションしないため、このログファイルは数週間でギガバイトのサイズに達する可能性があるため、このファイルを適切にローテーションできるようにしたい
ここでの主な懸念は、アプリケーションによって常に開かれているファイルをローテーションするには、おそらく次のことを行う必要があるということです。
ファイルを回転した形式に移動します/var/log/application.log -> /var/log/application.log.2013-01-28
空の/var/log/application.log
を作成します。 Obs:この時点で、アプリケーションプロセスは/var/log/application.log.2013-01-28
にまだ書き込み中です
アプリケーションプロセスのファイル記述子を変更して、再び/var/log/application.log
を指すようにします。
それで、私は正しいのですか?もしそうなら、どうすればこれを行うことができますか? (主にファイル記述子部分の変更)
そうでない場合、正しい方法とその方法を教えてください。
logrotate
configを記述してcopytruncate
を使用する
copytruncate
Truncate the original log file in place after creating a copy, instead of moving the
old log file and optionally creating a new one. It can be used when some program
cannot be told to close its logfile and thus might continue writing (appending) to
the previous log file forever. Note that there is a very small time slice between
copying the file and truncating it, so some logging data might be lost. When this
option is used, the create option will have no effect, as the old log file stays
in place.
このようなアプリケーションのほとんどは、SIGHUP
などの信号に応答し、信号を受信するとログファイルを閉じて再度開きます。送信する正しい信号については、アプリケーションのドキュメントを確認してください。