1行の「フラグ」ファイルを定期的に更新するブラックボックスシステムがあります。この 1 行ファイルは、システムの存続期間中に FSM 状態に応じてさまざまな値を持ちます。
たとえば、「ダウンロード」、「確認」、「公開」などがあります。特定の時点で値が異なるため、ソフトウェアは「フラグ」ファイルを開き、それを切り取った後に新しい1行の値を作成する必要があります。
連続的に異なる値のログをどのように維持しますか?同様のアプローチを考えましたがtail -f
、他の値を記録し、ソフトウェアがその値を更新するときにファイルシステムを妨げないことを保証できました。tail -f
しばらくすると、「ファイルの切り捨て」のために簡単な方法が失敗します。
ベストアンサー1
失敗した場合は、ファイルのオープン/読み取りを再試行することもできますtail -F
(大文字で表示)。
からman tail
:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow,
and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry
keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
あなたのバージョンに(同等)tail
がない場合は、inotifyを使用してからclose_writeを待つことができます(yes-F
tail -f=name --retry
inotifywait
イノティファイツール):
file=foo
while inotifywait -qq -e close_write "$foo" >/dev/null; do
cat "$foo"
done > log
tail -F
これを使用すると競合状態があるため、可能であればこの方法を使用することをお勧めしますinotifywait
。