Alternativa per "tail -f" che segue il nome del file


59

Ho alcuni registri generati utilizzando un registratore di file a rotazione temporizzata. Questo accede a un file chiamato tool.loge, a mezzanotte, lo sposta tool.log.<date>e ne avvia uno nuovo tool.log.

Ho una tail -f tool.logmacchina in esecuzione per tenere d'occhio i registri, ma a mezzanotte, quando tool.logviene rinominato tool.log.<date>, tailcontinua a guardare il file rinominato.

Quello che spero è uno strumento simile tail, ma continuerà a monitorare il file denominato tool.log, anziché seguire l'inode.

Esiste qualcosa del genere? In caso contrario, posso scrivere il mio in Python per questo scopo.

Risposte:


90

Alcune implementazioni di tailhanno un'opzione per questo; ecco la descrizione dalla pagina man per GNU tail:

-F
uguale a --follow=name --retry

-f, --follow[ ={ nome | descrittore }]
genera dati aggiunti man mano che il file cresce; -f, --followe --follow=descriptorsono equivalenti

--retry
continua a provare ad aprire un file anche quando è o diventa inaccessibile; utile quando si segue per nome, cioè con--follow=name

Poiché questa opzione non è specificata da POSIX, non è possibile dipenderla ovunque. Alcune implementazioni conosciute:

  • GNU - ha-Fcome descritto sopra
  • Mac OS X , FreeBSD e NetBSD - hanno-Fun'opzionesimilecon lo stesso effetto
  • OpenBSD --fè sufficiente (se il file viene sostituito (ovvero, il numero di inode cambia), tail riaprirà il file e continuerà)
  • Solaris - nessun equivalente
  • Busybox :-Fè disponibile nelle versioni recenti, ma deve essere compilatoENABLE_FEATURE_FANCY_TAIL(non è compilato per impostazione predefinita)

55

L'alternativa è il tail -Fcomando.

L' -Fopzione implica --follow=namecon --retryopzione, in modo coda sta guardando il file anche se è stato eliminato e creato di nuovo.


5

Dal momento che hai chiesto un'alternativa :

L' lessutilità potrebbe essere un'alternativa per tail -F.

Dovrà essere eseguito come segue: less --follow-name filename.loge premere Shift+ F.

Questo ti darà gli stessi risultati di tail -F.


Grazie. Stavo solo cercando un'alternativa perché non ero a conoscenza della coda -F. Sempre bene sapere le opzioni però.
Hugh,

4

Un'altra alternativa sarebbe quella di utilizzare il watchcomando, che ripeterà qualsiasi comando ogni n secondi, ogni 2 secondi in questo esempio:

watch -n2 "tail tool.log"

Utilizzare Ctrl+ Cper chiudere il comando al termine della visualizzazione del registro.


1
Sembra che creerebbe molti messaggi duplicati se il registro scorreva più lentamente del timer di aggiornamento e perderebbe alcuni messaggi se scorreva più velocemente.
Bobson

3
L'orologio occupa l'intero schermo, quindi non duplica i messaggi, ma rimuove la possibilità di scorrere indietro.
Hugh,

3

lnav è un altro fantastico strumento che segue il nome del file.

Puoi anche puntarlo a una directory e adatterà tutti i file in quella directory, oltre a tutti i tipi di altre funzionalità pulite.


Ho scoperto che non gestisce i registri ruotati troncati e / o rinominati (non sono sicuro che lo stia sconvolgendo nel mio caso particolare), quindi i registri sembrano fermarsi a mezzanotte a meno che non riavvii lnav. Mi sto perdendo qualche ovvio cambio o tecnica per questo mi chiedo come questo sembra qualcosa che dovrebbe prendere il suo passo?
Stuart Hickinbottom,

Dipende da come viene troncato il file. Se passi la -rbandiera a lnav ricaricherà il nome del file (e caricherà tutti i registri precedentemente ruotati)
Wayne Werner,

1

Non sono sicuro se multitailgestirà il tuo caso specifico, ma scommetto che lo fa. multitail fa praticamente tutto ciò che potresti voler tailfare.

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


1
Sì lo farà - multitail -f <name1> -f <name2> -f <name3> .... Questo esempio mostra di seguito diversi file contemporaneamente, che verranno mostrati in finestre separate.
Stuart Hickinbottom,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.