私はこれをテストしていませんが、最新のログ ファイルへのシンボリック リンクを作成および更新するバックグラウンド プロセスを実行し、tail -f
(または tail -F
) シンボリック リンク。
最も簡単な解決策は次のとおりだと思います:
tail -f `ls -tr | tail -n 1`
ここで、ディレクトリに「SystemLog」などの他のログ ファイルが含まれていて、最新の「SoftwareLog」ファイルのみが必要な場合は、次のように grep を含めるだけです:
tail -f `ls -tr | grep SoftwareLog | tail -n 1`
[編集:ツールをすばやくグーグル検索した後]
マルチテールを試してみてください - http://www.vanheusden.com/multitail/
Dennis Williamson の回答に固執したい場合 (それに応じて彼に +1 を付けました)、ここに空欄が埋められています。
シェルで、次のスクリプトを実行します (または、zsh に相当するスクリプトです。zsh タグが表示される前に、これを bash で作成しました):
#!/bin/bash
TARGET_DIR="some/logfiles/"
SYMLINK_FILE="SoftwareLog.latest"
SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE"
function getLastModifiedFile {
echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1)
}
function getCurrentlySymlinkedFile {
if [[ -h $SYMLINK_PATH ]]
then
echo $(ls -l $SYMLINK_PATH | awk '{print $NF}')
else
echo ""
fi
}
symlinkedFile=$(getCurrentlySymlinkedFile)
while true
do
sleep 10
lastModified=$(getLastModifiedFile)
if [[ $symlinkedFile != $lastModified ]]
then
ln -nsf $lastModified $SYMLINK_PATH
symlinkedFile=$lastModified
fi
done
通常の方法で処理する背景(やはりzshは知らないので違うかもしれませんが)...
./updateSymlink.sh 2>&1 > /dev/null
次に tail -F $SYMLINK_PATH
テールがシンボリック リンクの変更またはファイルのローテーションを渡すようにします。
これは少し複雑ですが、テールでこれを行う別の方法を知りません。他の誰かがこれを処理するユーティリティを知っている場合は、私もそれを見たいので、彼らに前進させてください.Jettyのようなアプリケーションはデフォルトでこのようにログを記録し、私は常にcronで実行されるシンボリックリンクスクリプトをスクリプト化して補償します.
[編集:1 つの行の終わりから誤った 'j' を削除しました。また、「lastModifiedFile」という変数名が存在しませんでした。設定した適切な名前は「lastModified」です]