1

複数のプロセスがログを記録するディレクトリがあり、選択したプロセスの最新のファイルを追跡したい。

~/bashrc に以下を追加しました

function __taillog {

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

alias taillog='__taillog'

から取得: https://superuser.com/questions/117596/how-to-tail-the-latest-file-in-a-directory

ログファイルディレクトリの例

-rw-r--r-- 1 genesys genesys   2284 Mar 19 16:34 gdalog.20130319_163436_906.log
-rw-r--r-- 1 genesys genesys 131072 Mar 19 16:34 gdalog.20130319_163436_906.snapshot.log
-rw-r--r-- 1 genesys genesys  10517 Mar 19 16:54 lcalog.20130319_163332_719.log
-rw-r--r-- 1 genesys genesys 131072 Mar 19 16:54 lcalog.20130319_163332_719.snapshot.log
-rw-r--r-- 1 genesys genesys   3792 Mar 19 16:37 StatServer_TLSTest.20130319_163700_703.log
-rw-r--r-- 1 genesys genesys 160562 Mar 19 16:52 StatServer_TLSTest.20130319_163712_045.log
-rw-r--r-- 1 genesys genesys  49730 Mar 19 16:54 StatServer_TLSTest.20130319_165217_402.log
-rw-r--r-- 1 genesys genesys  53960 Mar 20 09:55 StatServer_TLSTest.20130319_165423_702.log
-rw-r--r-- 1 genesys genesys 131072 Mar 20 09:56 StatServer_TLSTest.20130319_165423_702.snapshot.log

したがって、すべての StatServer を追跡するには、コマンドは次のようになります。

taillog /home/user/logs/StatServer*

そして、指定されたパスにあるそのアプリケーションの最新のファイルを追跡します

問題は、末尾にファイル出力の一部が表示されますが、ログ ファイルが追加されたときに更新が表示されないことです。次のコマンドを実行すると、ログが正しく末尾に表示されます

tail -f $(find /home/user/logs/StatServer*  -maxdepth 1 -type f -printf "%T@ %p\n" | sort -n | tail -n 1 | cut -d' ' -f 2-)

このコマンドを bash 関数として追加し、エイリアスから呼び出すと、意図したとおりに動作しないことがあります。

より良い方法に関する提案は大歓迎です。

4

2 に答える 2

1

次のコマンドを実行する必要があると思います。

taillog /home/user/logs

/home/user/logs/this_app*パターンに一致するすべてのファイルを引数として渡しtaillog、最初の引数、つまり、のみを使用すると言う$1と、コマンドは最終的にに変換されtail -f $1ます。

代わりに、そのディレクトリレベル(つまり、この場合)でファイルを検索$1するディレクトリを指定し、結果を、、およびにパイプします。find/home/user/logssorttailcut

于 2013-03-19T05:20:03.367 に答える