いくつかのログを継続的に監視するためにテールを使用していますが、ログがローテーションされると、そのファイルのテールは停止します。
私が理解している限り、問題は、ログがローテーションされると、新しいファイルが作成され、実行中のテールプロセスがその新しいファイルハンドルについて何も認識しないことです。
ああ、これにはフラグがあります。
tail -f /var/log/file
を使用する代わりに、tail -F /var/log/file
を使用する必要があります
tail -F
は、次のようにtail --follow=name --retry
に変換されます。
--follow=name
:ファイル記述子の代わりにファイルの名前に従います--retry
:ファイルにアクセスできない場合は、死なずに後で再試行してください# tail --follow=mylog.log
からman tail:
With --follow (-f), tail defaults to following the file descriptor,
which means that even if a tail’ed file is renamed, tail will continue
to track its end. This default behavior is not desirable when you
really want to track the actual name of the file, not the file descrip‐
tor (e.g., log rotation). Use --follow=name in that case. That causes
tail to track the named file by reopening it periodically to see if it
has been removed and recreated by some other program.
したがって、この場合は-F
オプションは正しいでしょう。
-F same as --follow=name --retry
正確な答えはOSによって異なりますが、多くの場合、tail -F
は正しいことを行います。
tail -Fまたはtail --follow = name
私見、ログファイルを日付ではなくサイズで変更するのは少し奇妙です。ほとんどのシステムログ(UNIXまたはLinux)は、サイズに基づいてではなく、週単位または月単位でローテーションします...これは、さまざまな理由で私が気に入っているものであり、実装すると問題を解決できるものでもあります。
8年後、ここで何を話しているのかわかりません。サイズごとにローテーションしたい場所はたくさんあります。毎日/毎週/毎月のローテーションは重大な問題を引き起こす可能性のあるMASSIVEファイルを生成する可能性があるためです。
より経験豊富な観点から見ると、本当の問題は、毎日増え続けるほど速く成長しているファイルを座って継続的にテールしたい理由です...それは、マトリックスストリームを見ているようなものです。
最近では、SplunkやSumologicのようなビッグデータログの集約をよりよく調べる必要があります。SplunkやSumologicは、ログイベントをクラスにフィルタリングし、特定のログ値に基づいてトリガーできます...ライブログを監視する必要はまったくありません。
本番サーバーでコマンドを使用します。
tail --follow var/log/Apache-access_log --retry