古い名前で新しいファイルを追跡する

古い名前で新しいファイルを追跡する

この一緒にまだ作成されていないファイル追跡を開始する方法1つの違いがあります。その名前のファイルがすでに存在することです。

何度も実行されるプログラムがあります。出力ファイル名がすでに使用されている場合は、_XYZファイル拡張子の前に最小の整数を挿入してXYZ既存のファイルの名前を変更します。例えば、 output.out)、または既に存在する場合output_001.outなど)デフォルト名で新しい出力ファイルを生成します。output_002.outoutput_001.out

デフォルトの名前を追跡すると、使用されても-Fすぐに既存のファイルの追跡を開始し、そのinodeへのハンドルを保持し、名前が変更されても新しいファイルを無視します。

プログラムはキュー管理機能を備えた共有クラスタで実行されるため、実行の開始時に長く可変の遅延が発生します。

まず、新しいファイルを作成せずに尾を結ぶことはできますか?それでは、どうすればいいですか?

答え1

tail -Fこれはすでに実行する必要があります。

空のものを作成します/tmp/t/file。その後、ターミナル1で起動しtail -Fて実行を続けます。

anthony@Zia:~$ tail -F /tmp/t/file
a
b
tail: `/tmp/t/file' has become inaccessible: No such file or directory
tail: `/tmp/t/file' has appeared;  following end of new file
c
d

第2ターミナルでは、以下を行いました。

anthony@Zia:/tmp/t$ echo a >> file
anthony@Zia:/tmp/t$ echo b >> file
anthony@Zia:/tmp/t$ mv -i file file.old; echo c >> file
anthony@Zia:/tmp/t$ echo d >> file

ご覧のとおりtail -F、実際にはinodeではなく名前が続きます。おそらくあなたが使用していることtailが異なる意味を持っているか-F(フラグは後でGNUによってコピーされたBSD拡張です)、またはあなたのバージョンにバグがあるかもしれません。tail --follow=name --retry(GNUテール代替構文)またはxtail(フルディレクトリ追跡)を試すこともできます。

関連情報