Alternativa para "tail -f" que sigue al nombre del archivo

59

Tengo algunos registros que se generan utilizando un registrador de archivos rotativo temporizado. Esto registra un archivo llamado tool.logy, a medianoche, lo mueve tool.log.<date>y comienza un nuevo tool.log.

Tengo un tail -f tool.logfuncionamiento en la máquina para vigilar los registros, pero a la medianoche, cuando tool.logse le cambia el nombre tool.log.<date>, tailcontinúa mirando el archivo renombrado.

Lo que espero es una herramienta similar tail, pero que continuará monitoreando el archivo nombrado tool.log, en lugar de seguir el inodo.

Existe algo como esto? Si no, puedo escribir el mío en Python para este propósito.

Hugh
fuente

Respuestas:

90

Algunas implementaciones de tailtienen una opción para esto; Aquí está la descripción de la página del manual para GNU tail:

-F
igual que --follow=name --retry

-f, --follow[ ={ nombre | descriptor }]
genera datos agregados a medida que crece el archivo; -f, --followy --follow=descriptorson equivalentes

--retry
siga intentando abrir un archivo incluso cuando esté o se vuelva inaccesible; útil cuando se sigue por nombre, es decir, con--follow=name

Como POSIX no especifica esta opción, no puede depender de ella en todas partes. Algunas implementaciones conocidas:

  • GNU - tiene-Fcomo se describió anteriormente
  • Mac OS X , FreeBSD y NetBSD : tienen una-Fopciónsimilarcon el mismo efecto
  • OpenBSD :-fes suficiente (si se reemplaza el archivo (es decir, el número de inodo cambia), la cola volverá a abrir el archivo y continuará)
  • Solaris : sin equivalente
  • Busybox :-Festá disponible en versiones recientes, pero debe compilarse conENABLE_FEATURE_FANCY_TAIL(no está compilado por defecto)
Toby Speight
fuente
55

La alternativa es el tail -Fcomando.

La -Fopción implica --follow=namecon --retryopción, por lo que tail está mirando su archivo incluso si se ha eliminado y creado de nuevo.

Oleg Bolden
fuente
5

Como ha pedido una alternativa :

La lessutilidad podría ser una alternativa para tail -F.

Tendrá que ejecutarse de la siguiente manera: less --follow-name filename.logy presione Shift+ F.

Esto le dará los mismos resultados que tail -F.

VL-80
fuente
Gracias. Solo buscaba una alternativa porque no tenía conocimiento de la cola -F. Sin embargo, siempre es bueno saber las opciones.
Hugh
4

Otra alternativa sería usar el watchcomando, que repetirá cualquier comando cada n segundos, cada 2 segundos en este ejemplo:

watch -n2 "tail tool.log"

Use Ctrl+ Cpara salir del comando cuando haya terminado de ver el registro.

Arronico
fuente
1
Parece que crearía muchos mensajes duplicados si el registro se desplazara más lento que el temporizador de actualización, y perdería algunos mensajes si se desplazara más rápido.
Bobson el
3
Watch ocupa toda la pantalla, por lo que no duplicaría mensajes, pero eliminaría la capacidad de retroceder.
Hugh
3

lnav es otra herramienta fantástica que sigue el nombre del archivo.

También puede apuntarlo a un directorio y ajustará todos los archivos en ese directorio, además de todo tipo de otras características ordenadas.

Wayne Werner
fuente
He descubierto que no maneja registros rotados truncados y / o renombrados (no estoy seguro de qué lo está alterando en mi caso particular), por lo que los registros parecen detenerse a medianoche a menos que reinicie lnav. ¿Me estoy perdiendo algún cambio o técnica obvia para ello? Me pregunto, ya que esto parece algo que debería tomar con calma.
Stuart Hickinbottom
Depende de cómo se trunca el archivo. Si pasa la -rbandera a lnav, volverá a cargar el nombre de archivo (y cargará los registros previamente rotados)
Wayne Werner
1

No estoy seguro de si multitailmanejará su caso específico, pero apuesto a que lo hace. multitail hace prácticamente todo lo que quieras tailhacer.

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

Andy Lester
fuente
1
Sí lo hará - multitail -f <name1> -f <name2> -f <name3> .... Este ejemplo muestra a continuación varios archivos simultáneamente, que se mostrarán en ventanas separadas.
Stuart Hickinbottom