tail -f 最近のログファイル

tail -f 最近のログファイル

ある場所では私がうまくいった。

ls -rt /path/to/log/file/ | tail -1 | xargs tail -f

しかし、なぜ常に機能しないのか理解できません。
(ここでログローリングを修正するまで、これはクイック修正です。)

ベストアンサー1

ソートコマンドとTHE最近のログファイル

-r出力端到達を使用する代わりに(逆ソート順)を使用するのはなぜですかtail

一般的なソート順序を使用して最初のアイテムを取得する方が高速です!

tail -f `/bin/ls -1td /path/to/log/file/*| /usr/bin/head -n1`

または

tail -f $(/bin/ls -1t /path/to/log/file/* | /bin/sed q)

うまくいきます。

sed注:このコマンドはにあるので、インストールする/bin前に使用することをお勧めします/usr

tail -f `/bin/ls -1tr /path/to/log/file/* | /bin/sed -ne '$p'`

これはうまくいきますが、すでに述べたように、最後の項目だけを使用するために出力全体を削除するのではなく、ソート順を逆にすると機能しません。本当に良い考えです。;-)

警告する、最後のディレクトリのディレクトリ*と一致しないでください。そうしないと、コマンドがtailそのディレクトリを開く方法がわかりません。

同じですが、find最新のファイルを検索する場合:

read -a file < <(
    find /tmp 2>/dev/null -type f -mmin +-1 -mmin -10 -printf "%Ts %p\n" |
    sort -rn)
tail -f ${file[1]}

メモ:

  • -mmin +-1間違ったタイミングファイルがリストされていないことを確認してください。未来に
  • read組み込みで、配列を作成して使用をブロックします。head -n1| cut -d \ -f2
  • -mmin -10これを変更または抑制できますが、これによりソートプロセスが長くなるのを防ぎます。

ただし、tailは複数のファイルビューをサポートしています。

2つのシェルコンソールを開き、次のことを試してください。

最初のコンソールで:

user@host[pts/1]:~$ touch /tmp/file_{1,2,3}
user@host[pts/1]:~$ tail -f /tmp/file_{1,2,3}
==> /tmp/file_1 <==

==> /tmp/file_2 <==

==> /tmp/file_3 <==

2番目は、最初のコンソールが表示された状態で複数回クリックします。

user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
25285
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
16381
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
19766
user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM
3053

最初のコンソールは次のとおりです。

==> /tmp/file_2 <==
25285

==> /tmp/file_1 <==
16381
19766

==> /tmp/file_3 <==
3053

...

SO質問のアイデアですが、時間ベースのマルチファイル

find次のコマンドを使用すると、-mmin過去数分または数日間に変更されたファイルを監視できます-mtime

find /path/to/logdir -type f -mmin -10 -exec tail -f {} +

過去10分間の修正を監視するために使用されるログファイル。

メモ:

  • 見てman tail、薬
    • -F長時間視聴オプション
    • -qファイル名を印刷しないオプション

素晴らしいフォーマット

find /path/to/logdir -type f -mmin -10 -exec tail -f {} + |
    sed -une 's/^==> .path.to.logdir.\(.*\) <==$/\1             /;ta;bb;
               :a;s/^\(.\{12\}\) *$/\1: /;h;bc;
               :b;G;s/^\(..*\)\n\(.*\)/\2 \1/p;:c;'

そこでより適切な長さに変更して.path.to.logdir.変更できます。12

たとえば、2つのコンソールを保持し、最初のコンソールは停止して試みます。

user@host[pts/1]:~$ find /tmp/ -type f -mtime -1 -name 'file_?' -exec tail -f {} + |
    sed -une 's/^==> .tmp.\(.*\) <==$/\1             /;ta;bb;
        :a;s/^\(.\{12\}\) *$/\1: /;h;bc;
        :b;G;s/^\(..*\)\n\(.*\)/\2 \1/p;:c;'
file_2      :  25285
file_1      :  16381
file_1      :  19766
file_3      :  3053

2番目のコンソールよりももう一度クリックしてください。

user@host[pts/2]:~$ tee -a /tmp/file_$((RANDOM%3+1)) <<<$RANDOM

おすすめ記事