Logrotateは開いたファイルを切り捨てません。

Logrotateは開いたファイルを切り捨てません。

テストとデモの両方のプラットフォームの役割を実行するシステムがあります。システムから出力される多くのデータを記録していますが、ログファイルがすぐに埋められ、最終的にハードドライブのパーティションスペースをすべて使用することになりますので、配布するときは記録しません。

試してみましたlogrotateが、プログラムが実行されていない場合にのみ機能するようです。プログラムが閉じたら、ファイルを正しく切り取り、圧縮されたバージョンを記録し、残りを削除します。ただし、ログファイルを入力するプログラムが実行されている場合、圧縮ファイルは正しく生成されますが、アクティブファイルは切り捨てられません。どのように切り取るかを調べようとします。

単純なリダイレクトを介してログファイルに書き込みます。 ProgramA>logAなどprogramB>logB私のプログラムは入力ベクトルを受け取るたびに出力するので、出力は非常に高速です。私の仮定は、フィールドへの継続的な書き込みのためにログロテートが切り捨てられないことです。しかし、これが理由であることを確認できる人はいますか?

logrotateはエラーファイルを正確にどこに保存しますか?

また:logrotateの動作を修正したいと思います。有効になって100MBなどの大容量ログファイルが表示されたら、コピーを作成したいと思います。ただ元のログファイルを切り捨てる前に、ファイルの最後の1MBを削除します(ファイルの古い99MBのコンテンツを削除します)。最新のデータを維持する必要がありますが、非常に古いデータはあまり気にしません。誰でもこれを行う方法を教えてもらえますか?

ベストアンサー1

私はこれが少し古いことを知っていますが、同じ問題があり、解決策は出力ファイルを破壊するのではなく、出力ファイルに追加のリダイレクトを使用することでした。これにより、アプリケーション/スクリプトはファイルを排他的にロックしません。

変える:

ProgramA > logA

使用:

ProgramA >> logA 

挨拶。

おすすめ記事