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"]