web-dev-qa-db-ja.com

tail -f、ただしファイルが削除されて再作成されたとき(追加されない)

ログファイルの新しい出力を監視しようとしています。 (私の制御下にない)別のスクリプトがファイルを削除してから、同じ名前で新しいファイルを作成しています。ファイルが削除されているため、tail -fを使用しても機能しません。

7
Caleb Jares

tailがサポートしている場合は、 tail -F を使用してください。ファイルの非表示や再表示で問題なく動作します。そのままにしておくディレクトリからtailを起動することを確認してください。

-F--follow=name --retryの省略形です。tailはファイル記述子ではなく名前でファイルを追跡し、ファイルにアクセスできない場合は再試行します(eg 削除されたため)。

--follow=name--retryに関連する多数のバグがcoreutils 8.26で修正されたため、以前のバージョンで問題が発生する可能性があります;eg末尾のファイルを含むディレクトリが削除されたときに再試行すると、バージョン8.26以降ではすべての場合にのみ機能するように見えます。

23
Stephen Kitt

あなたのテールマンコマンドを見てください、いくつかは持っています:

--follow=name

これは、tailに名前を監視するように指示します。デフォルトのように記述子を監視するのではありません。このようなオプションを使用すると、ファイルが削除されて再作成された場合、tailはそれを表示します。マニュアルに書かれているように:

--follow(-f)を使用すると、tailはデフォルトでファイル記述子の後に続きます。つまり、tailが付けられたファイルの名前が変更されても、tailはその終わりを追跡し続けます。このデフォルトの動作は、ファイル記述子ではなく実際のファイル名を追跡する場合(ログのローテーションなど)には望ましくありません。その場合は--follow = nameを使用します。これにより、tailは名前の変更、削除、作成に対応する方法で名前付きファイルを追跡します。

2
Patrick Mevzek