後続のテールが古いファイルから新しいファイルにいつ移動されるかを確認する方法

後続のテールが古いファイルから新しいファイルにいつ移動されるかを確認する方法

だから私はtail -F(またはtail --follow = filename)を使っています。これで広告されたとおりに機能し、ロールオーバーが発生すると新しいファイルに移動します。

これは素晴らしく、私のログを追跡するのに役立ちます。問題は、tailが古いファイルから新しいファイルにいつ移動されるかを知りたいことです。

詳細は次のとおりです。

処理に15分かかる大容量ログファイルがあります。 5分後に反転が発生するとします。 Tailはファイルの説明を開き、それを使用してテーリングプロセスを完了し、新しいプロセスに移動します。

最後に記録されたファイルと行の記録を保持します。私はプロセスの行数を増やすことでこれをしました(マルチプロセスプログラムですが、何ができますか?)。

問題は、反転後、新しいファイルが行0から始まりますが、私のline_numberが500万個に増えたということです。したがって、100個のログを含むこの新しいファイルの場合、行番号は5,000,100として保存されます。

行番号をゼロにリセットするためにファイルが反転するタイミングを見つけるためにウォッチドッグを使用します。ただし、最初の実行中に反転が発生した場合(たとえば、15分実行中に5分表示で)、まだ300万を超える数値が得られます。

line_numberは最後に中断した部分から続行するために使用されるため、プログラムが予期せず終了した場合、これはデータの損失を意味する可能性があります。

注:私はこのコマンドをPython(CPython)で実行しています。

答え1

stderrtailからにリダイレクトしstdout、提供されたコメントを処理しますtail -F

tail -F myLog.txt 2>&1

Pythonコードは次のメッセージを受け取るはずです。

tail: cannot open 'myLog.txt' for reading: No such file or directory
tail: 'myLog.txt' has appeared;  following new file
tail: myLog.txt: file truncated

YMMV:引用は信頼できないようで、ファイルを反転すると競合状態が発生する可能性があります。しかし、file truncatedその後には新しい行1が来なければなりません。

関連情報