この一緒にまだ作成されていないファイル追跡を開始する方法1つの違いがあります。その名前のファイルがすでに存在することです。
何度も実行されるプログラムがあります。出力ファイル名がすでに使用されている場合は、_XYZ
ファイル拡張子の前に最小の整数を挿入してXYZ
既存のファイルの名前を変更します。例えば、 output.out
)、または既に存在する場合output_001.out
など)デフォルト名で新しい出力ファイルを生成します。output_002.out
output_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
(フルディレクトリ追跡)を試すこともできます。