ロガーが削除されたファイルを記録し続けるにはどうすればよいですか?

ロガーが削除されたファイルを記録し続けるにはどうすればよいですか?

~からUnix電動工具、第3版:ファイルを削除せずに空にしてください。部分:

アクティブなプロセスでファイルが開いている場合(ログファイルの場合は一般的)、ファイルを削除して新しいファイルを作成してもメッセージには影響しません。接続されなくなったファイルには引き続きアクセスできます。。ファイルを消去しても接続が失われないため、ロギングプログラムに影響を与えずにファイルが消去されます。

私のことを強調する)

プログラムが削除されたファイルを記録し続ける理由を理解できません。ファイル記述子エントリがプロセステーブルから削除されなかったためですか?

ベストアンサー1

ファイルを削除すると、実際にはそのファイル(inode)へのリンクが削除されます。誰かがすでにファイルを開いたままにしている場合は、自分が所有するファイル記述子を保持できます。ファイルはディスク上に残りスペースを占有し、ファイルにアクセスできる場合はファイルに書き込んで読み取ることができます。

これunlink機能POSIX は次の動作を定義します。

ファイルのリンク数がゼロに達し、ファイルを開くプロセスがないと、ファイルが占有するスペースが解放され、ファイルにアクセスできなくなります。最後のリンクが削除されたときに1つ以上のプロセスでファイルが開いていた場合は、unlink()が返される前にリンクを削除する必要があります。ファイル内容の削除は、ファイルへのすべての参照が閉じられるまで延期する必要があります。

このアドバイスは、これらの動作のために提供されます。デーモンはファイルを開き、ファイルが削除されたことを知りません(ファイルを特に監視することを除いて、これはまれです)。自分が所有する既存のファイル記述子に書き続けます。ディスク上の(より多くの)スペースを占有し続けますが、記録されたメッセージは表示されないため、実際には最悪の状況にあります。 2つの世界の。ファイルの長さをゼロに切り捨てると、スペースはすぐに空になり、新しいメッセージがファイルの新しい末尾に追加されて表示されます。

最終的にデーモンが終了したり、close文書、スペースが公開されます。新しい人は同時にファイルを開くことができません(システム固有の反映インターフェースを介している場合を除く)。Linux/proc/x/fd/...)。また、以下を保証します。

ファイル内のリンク数が0の場合、ファイルに関連付けられているすべてのファイル記述子が閉じられると、ファイルが占有するスペースが解放され、ファイルにアクセスできなくなります。

したがって、ディスク容量が永久に失われることはありませんが、ファイルを削除しても利点はなく、新しいメールにアクセスできません。

おすすめ記事