GNU/Linux >> Belajar Linux >  >> Linux

Cara tail -f file log terbaru dengan pola yang diberikan

Saya belum menguji ini, tetapi pendekatan yang mungkin berhasil adalah menjalankan proses latar belakang yang membuat dan memperbarui symlink ke file log terbaru dan kemudian Anda akan tail -f (atau tail -F ) symlink.


Saya yakin solusi paling sederhana adalah sebagai berikut:

tail -f `ls -tr | tail -n 1`

Sekarang, jika direktori Anda berisi file log lain seperti "SystemLog" dan Anda hanya menginginkan file "SoftwareLog" terbaru, maka Anda cukup memasukkan grep sebagai berikut:

tail -f `ls -tr | grep SoftwareLog | tail -n 1`

[Sunting:setelah googling cepat untuk alat]

Anda mungkin ingin mencoba multitail - http://www.vanheusden.com/multitail/

Jika Anda ingin tetap menggunakan jawaban Dennis Williamson (dan saya telah memberinya +1 sesuai dengan itu), berikut adalah bagian yang kosong untuk Anda.

Di shell Anda, jalankan skrip berikut (atau setara dengan zsh, saya menyiapkannya di bash sebelum saya melihat tag zsh):

#!/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

Latar belakang proses itu menggunakan metode normal (sekali lagi, saya tidak tahu zsh, jadi mungkin berbeda)...

./updateSymlink.sh 2>&1 > /dev/null

Lalu tail -F $SYMLINK_PATH sehingga ekor menyerahkan perubahan tautan simbolik atau rotasi file.

Ini sedikit berbelit-belit, tapi saya tidak tahu cara lain untuk melakukan ini dengan ekor. Jika ada orang lain yang mengetahui utilitas yang menangani ini, biarkan mereka melangkah maju karena saya juga ingin melihatnya sendiri - aplikasi seperti Jetty secara default melakukan log dengan cara ini dan saya selalu membuat skrip symlink yang dijalankan pada cron untuk mengimbanginya untuk itu.

[Sunting:Menghapus 'j' yang salah dari akhir salah satu baris. Anda juga memiliki nama variabel yang buruk "lastModifiedFile" tidak ada, nama yang tepat yang Anda atur adalah "lastModified"]


Linux
  1. Cara memverifikasi integritas file dengan md5 checksum

  2. Shellscript untuk memantau file log jika kata kunci memicu lalu jalankan perintah?

  3. Cara menampilkan hasil grep dengan path lengkap atau nama file

  1. Bagaimana cara membuat ssh masuk sebagai pengguna yang tepat?

  2. tar -C dengan pola file wildcard

  3. Bagaimana cara mengisi file dengan FF menggunakan dd?

  1. Bagaimana Menemukan Proses Dengan Deskriptor File Maksimum?

  2. Cara Mengosongkan File Log di Linux

  3. Cara menemukan file .pid untuk proses tertentu