Dosya adını izleyen “tail -f” alternatifi


59

Zamanlanmış dönen bir dosya kaydedici kullanılarak oluşturulan bazı günlükler var. Bu, bir dosyaya giriş yapar tool.logve gece yarısı bunu hareket ettirir tool.log.<date>ve yeni bir başlangıç ​​yapar tool.log.

Bir var tail -f tool.loggünlükleri bir göz tutmak için makine üzerinde çalışan, ancak gece yarısı, ne zaman tool.logyeniden adlandırılır tool.log.<date>, tailyeniden adlandırılan dosyayı izlemek devam ediyor.

Umduğum şey , inode'u takip etmek yerine, tailadlandırılmış dosyayı izlemeye benzer , ancak izlemeye devam edecek bir araçtır tool.log.

Böyle bir şey var mı? Olmazsa, bu amaç için Python'da kendim yazabilirim.

Yanıtlar:


90

Bazı uygulamaların bunun tailiçin bir seçeneği var; GNU kuyruğu için man sayfasındaki açıklama:

-F
ile aynı --follow=name --retry

-f, --follow[ ={ isim | tanımlayıcı }]
dosya büyüdükçe eklenen veri çıkışı; -f, --followve --follow=descriptoreşdeğerdir

--retry
bir dosyayı mümkün olsa da erişilemez olsa bile açmaya çalışın; İsme göre takip ederken, yani--follow=name

Bu seçenek POSIX tarafından belirtilmediğinden, her yere güvenemezsiniz. Bilinen bazı uygulamalar:

  • GNU --Fyukarıda açıklandığı gibi
  • Mac OS X , FreeBSD ve NetBSD --Faynı etkiye sahipbenzer birseçeneğe sahip
  • OpenBSD --fyeterlidir (eğer dosya değiştirilirse (örneğin, inode numarası değişir), kuyruk dosyayı yeniden açıp devam eder)
  • Solaris - eşdeğeri yok
  • Busybox --Fson sürümlerde mevcuttur, ancak derlenmelidirENABLE_FEATURE_FANCY_TAIL(varsayılan olarak derlenmemiştir)

55

Alternatif tail -Fkomuttur.

-FSeçeneğini ima --follow=nameile --retryseçeneği, bu nedenle kuyruk tekrar silinir ve yaratılmış olsa bile dosyanızı izliyor.


5

Alternatifini istediğinden beri :

Yardımcı lessprogram için bir alternatif olabilir tail -F.

Aşağıdaki şekilde çalıştırılması gerekir: less --follow-name filename.logve Shift+ tuşlarına basın F.

Bu size aynı sonuçları verecektir tail -F.


Teşekkürler. Sadece bir alternatifin peşindeydim çünkü kuyruğun farkında değildim -F. Seçenekleri bilmek her zaman iyidir.
Hugh

4

Başka bir alternatif watch, bu örnekte her n saniyede bir, her 2 saniyede bir herhangi bir komutu tekrarlayacak olan komutu kullanmak olacaktır:

watch -n2 "tail tool.log"

Günlüğü görüntülemeyi bitirdiğinizde komuttan çıkmak için Ctrl+ kullanın C.


1
Bu, eğer kayıt yenileme zamanlayıcısından daha yavaş kaydırılırsa, birçok mesajın çoğalmasına neden olacak ve daha hızlı kaydırılırsa bazı mesajları kaçıracak gibi görünüyor.
Bobson

3
İzle ekranın tamamını devraldı, böylece mesajları çoğaltmayacaktı, ancak geri dönme özelliğini kaldıracaktı.
Hugh

3

lnav , dosya ismini takip eden fantastik bir araçtır.

Ayrıca bir dizine işaret edebilirsiniz ve her türlü diğer güzel özelliklere ek olarak, bu dizindeki tüm dosyaları sıraya koyar.


Kısaltılmış ve / veya yeniden adlandırılmış döndürülmüş kütükleri işleyemediğini gördüm (özel vakamda hangisini üzdüğünden emin değilim), bu nedenle günlükleri lnav'ı yeniden başlatmadığım sürece gece yarısı durur gibi görünüyor. Bunun için bariz bir anahtar veya tekniği kaçırıyor muyum, sanki bunun kendi adımlarında atması gereken bir şey gibi görünüyor?
Stuart Hickinbottom

Dosyanın nasıl kesildiğine bağlıdır. Eğer -rbayrak lnav'a geçirirseniz dosya adını yeniden yükler (ve daha önce döndürülmüş kütükleri yükler)
Wayne Werner

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.