テストとデモの両方のプラットフォームの役割を実行するシステムがあります。システムから出力される多くのデータを記録していますが、ログファイルがすぐに埋められ、最終的にハードドライブのパーティションスペースをすべて使用することになりますので、配布するときは記録しません。
試してみましたlogrotate
が、プログラムが実行されていない場合にのみ機能するようです。プログラムが閉じたら、ファイルを正しく切り取り、圧縮されたバージョンを記録し、残りを削除します。ただし、ログファイルを入力するプログラムが実行されている場合、圧縮ファイルは正しく生成されますが、アクティブファイルは切り捨てられません。どのように切り取るかを調べようとします。
単純なリダイレクトを介してログファイルに書き込みます。 ProgramA>logA
などprogramB>logB
私のプログラムは入力ベクトルを受け取るたびに出力するので、出力は非常に高速です。私の仮定は、フィールドへの継続的な書き込みのためにログロテートが切り捨てられないことです。しかし、これが理由であることを確認できる人はいますか?
logrotateはエラーファイルを正確にどこに保存しますか?
また:logrotateの動作を修正したいと思います。有効になって100MBなどの大容量ログファイルが表示されたら、コピーを作成したいと思います。ただ元のログファイルを切り捨てる前に、ファイルの最後の1MBを削除します(ファイルの古い99MBのコンテンツを削除します)。最新のデータを維持する必要がありますが、非常に古いデータはあまり気にしません。誰でもこれを行う方法を教えてもらえますか?
ベストアンサー1
私はこれが少し古いことを知っていますが、同じ問題があり、解決策は出力ファイルを破壊するのではなく、出力ファイルに追加のリダイレクトを使用することでした。これにより、アプリケーション/スクリプトはファイルを排他的にロックしません。
変える:
ProgramA > logA
使用:
ProgramA >> logA
挨拶。