GNU/Linux >> Linux の 問題 >  >> Linux

特定のパターンで最新のログ ファイルを末尾に -f する方法

私はこれをテストしていませんが、最新のログ ファイルへのシンボリック リンクを作成および更新するバックグラウンド プロセスを実行し、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」です]


Linux
  1. auditd ログ ファイル /var/log/audit/audit.log のパスを変更する方法

  2. Linuxで特定のサイズのファイルを作成するには?

  3. キーワードがトリガーされた場合にログファイルを監視するシェルスクリプトは、コマンドを実行しますか?

  1. tr コマンド - 文字列 \n を実際の改行 (\n) に置き換える方法

  2. wgetで最新のAnacondaをインストールするにはどうすればよいですか

  3. 正しいユーザーとして ssh ログインする方法は?

  1. ワイルドカード ファイル パターンを指定した tar -C

  2. ddを使用してFFでファイルをパディングする方法は?

  3. 「tar」コマンドと「find」コマンドを組み合わせる方法