Alternatif untuk "tail -f" yang mengikuti nama file

59

Saya memiliki beberapa log yang dihasilkan menggunakan file logger memutar waktunya. Log ini ke file yang disebut tool.log, dan pada tengah malam, memindahkan ini ke tool.log.<date>dan memulai yang baru tool.log.

Saya memiliki tail -f tool.logmenjalankan pada mesin untuk mengawasi log, tetapi pada tengah malam, ketika tool.logdiubah namanya menjadi tool.log.<date>, tailterus menonton file yang diubah namanya.

Apa yang saya harapkan adalah alat yang mirip dengan itu tail, tetapi akan terus memonitor file bernama tool.log, daripada mengikuti inode.

Apakah ada yang seperti ini? Jika tidak, saya dapat menulis sendiri dengan Python untuk tujuan ini.

Hugh
sumber

Jawaban:

90

Beberapa implementasi tailmemiliki opsi untuk ini; inilah deskripsi dari halaman manual untuk GNU tail:

-F
sama dengan --follow=name --retry

-f, --follow[ ={ nama | descriptor }]
output data yang ditambahkan saat file bertambah; -f,, --followdan --follow=descriptorsetara

--retry
terus mencoba untuk membuka file bahkan ketika itu atau menjadi tidak dapat diakses; berguna saat mengikuti dengan nama, yaitu dengan--follow=name

Karena opsi ini tidak ditentukan oleh POSIX, Anda tidak dapat bergantung padanya di mana-mana. Beberapa implementasi yang dikenal:

  • GNU - memiliki-Fseperti yang dijelaskan di atas
  • Mac OS X , FreeBSD dan NetBSD - memiliki-Fopsiserupadengan efek yang sama
  • OpenBSD --fcukup (jika file diganti (yaitu, nomor inode berubah), tail akan membuka kembali file dan melanjutkan)
  • Solaris - tidak ada padanannya
  • Busybox --Ftersedia dalam versi terbaru, tetapi harus dikompilasi denganENABLE_FEATURE_FANCY_TAIL(itu tidak dikompilasi-in secara default)
Toby Speight
sumber
55

Alternatif adalah tail -Fperintah.

The -Fpilihan menyiratkan --follow=namedengan --retrypilihan, sehingga ekor menonton file Anda bahkan jika itu telah dihapus dan dibuat lagi.

Oleg Bolden
sumber
5

Karena Anda telah meminta alternatif :

The lessutilitas bisa menjadi alternatif untuk tail -F.

Itu harus dijalankan sebagai berikut: less --follow-name filename.logdan tekan Shift+ F.

Ini akan memberi Anda hasil yang sama dengan tail -F.

VL-80
sumber
Terima kasih. Saya hanya mencari alternatif karena saya tidak mengetahui tentang ekor -F. Selalu baik untuk mengetahui opsi.
Hugh
4

Alternatif lain adalah menggunakan watchperintah, yang akan mengulangi perintah apa pun setiap n detik, setiap 2 detik dalam contoh ini:

watch -n2 "tail tool.log"

Gunakan Ctrl+ Cuntuk keluar dari perintah ketika Anda selesai melihat log.

Arronikal
sumber
1
Ini sepertinya akan membuat banyak pesan duplikat jika log digulir lebih lambat dari waktu refresh, dan akan kehilangan beberapa pesan jika digulir lebih cepat.
Bobson
3
Tonton mengambil alih seluruh layar, sehingga tidak akan menggandakan pesan, tetapi itu akan menghilangkan kemampuan untuk menggulir kembali.
Hugh
3

lnav adalah alat fantastis lain yang mengikuti nama file.

Anda juga dapat mengarahkannya ke direktori dan itu akan mengekor semua file di direktori itu, di samping semua jenis fitur rapi lainnya.

Wayne Werner
sumber
Saya menemukan itu tidak menangani log terpotong dan / atau berganti nama (saya tidak yakin mana yang menjengkelkan dalam kasus khusus saya) sehingga log tampaknya berhenti pada tengah malam kecuali saya me-restart lnav. Apakah saya kehilangan beberapa saklar yang jelas atau teknik untuk itu saya bertanya-tanya karena ini sepertinya sesuatu yang harus diambil sebagai langkahnya?
Stuart Hickinbottom
Itu tergantung pada bagaimana file tersebut terpotong. Jika Anda mengoper -rbendera ke lnav itu akan memuat ulang nama file (dan memuat log yang sebelumnya diputar)
Wayne Werner
1

Saya tidak yakin apakah multitailakan menangani kasus spesifik Anda, tetapi saya yakin itu akan terjadi. multitail melakukan hampir semua yang ingin Anda taillakukan.

https://en.wikipedia.org/wiki/MultiTail

Andy Lester
sumber
1
Ya itu akan - multitail -f <name1> -f <name2> -f <name3> .... Contoh ini menunjukkan beberapa file berikut secara bersamaan, yang akan ditampilkan di jendela terpisah.
Stuart Hickinbottom