web-dev-qa-db-ja.com

最新のログファイルが日付を変更したときに、ログファイルをテールにし、それをテールし続けるにはどうすればよいですか?

RHEL 4を使用しています。

通常の_tail -F file_name*.log_は、時間が0000に切り替わっても更新されません。

これが私がこれまでウェブを検索することから試みたもので、どちらもネストされたtailを使用しようとします:

tail -F $(ls -tr file_name*.log | tail -n 1)

tail -F $(fine . -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | tail n 1 | cut -d' ' -f 2-)

これらはどれも新しいファイルに切り替わりません。単純な古い_tail -F file_name*.log_は小さなテストケースで機能します(上記の2つは機能しません)が、実際のログファイルをテーリングしているときは機能しません。

7
Ken Oh

これは機能しません(機能しません)。最新のファイルを決定するために使用しているサブシェルは、一度だけ実行されます。シェルはワイルドカードのみを評価するため、グロブは機能しません。

これに対処する1つの方法は、 'watch'を使用してすべてを実行することですが、これにより、出力が非常に多くの秒ごとにハッキングされます。

4
tink

tailは、単一のファイル、または最大で起動時に決定される一連のファイルを監視します。コマンドtail -F file_name*.log、最初にシェルはワイルドカードパターンを展開し、次にtailがその時点で存在するファイルに対して呼び出されます。

ワイルドカードに基づいて一連のファイルを監視するには、 multitail を使用できます。

multitail -iw 'file_name*.log' 1

おそらく、尾を引くために何かを書かなければならないでしょう。または、深夜にログ(またはそのログ)をロールしないようにシステムを構成します。どちらにしても、ロールされたときにテールログファイルのファイルハンドルがリセットされます。

1
Mark Cohen