¿Cómo uso menos un nombre de archivo en lugar de un número de inodo?

11

Tengo un software que rota sus archivos de registro cuando se reinicia. Sin embargo, durante el desarrollo, lo reinicio mucho, por lo que me gustaría monitorear el último archivo de registro en cualquier momento.

Si empiezo lessnormalmente con less program.logy presiono Shift+ fen la cola, cuando el archivo de registro se gira, continúo monitoreando el archivo de registro anterior. Supongo que esto se debe a que el número de inodo permanece igual y lesstiene un identificador de archivo abierto para ese inodo.

¿Es posible monitorear la última actividad en cualquier archivo de registro que se llame actualmente program.log?

Específicamente, estoy trabajando en Sun OS, por lo que una solución que funcione allí sería ideal.

Alex Chamberlain
fuente
quizás tail -F program.log | lessfuncione
sendmoreinfo
tail -f program.log has intentado esto?
Rahul Patil

Respuestas:

17

Úselo less --follow-namesi su versión de lo lessadmite. Esa opción se introdujo en la versión 416.

Stéphane Chazelas
fuente
Excelente respuesta Tanto Solaris 10 como Solaris 11 usan menos la versión 436, por lo que esta opción está disponible.
unixhacker2010
5

La lessopción --follow-namees solo una parte de la solución;
Para reemplazar tail -F, se necesita otro argumento:

less --follow-name +F file.log

La opción solo como en less --follow-name file.logrealidad no comienza a seguir las actualizaciones del archivo. Debe ingresar al modo de seguimiento presionando ShiftF.
(Salga del modo para navegar ControlC).

En lugar de seguir el archivo, --follow-name modifica el comportamiento de less.
Hace que la tecla de comando ShiftFdentro de lessseguir se base en el nombre del archivo, no en el descriptor del archivo.

Además, no hay una opción normal para comenzar lessen modo de seguimiento.
Pero puede usar la línea de comando para dar pulsaciones de teclas para ejecutar después del inicio, prefijándolas con +.
La combinación de la opción del modificador con +F, en lessrealidad comenzará en el modo de seguimiento (modificado).

Úselo +Fsolo para el equivalente de plain tail -f:

less +F file.log
Volker Siegel
fuente
1

Acabo de encontrar la respuesta en estas preguntas y respuestas de U&L tituladas: ¿Cómo hacer un tail -fregistro de archivos rotados? .

Utilizando tail:

(si instalar GNU tail en su sistema es una opción)

tail -F program.log

Desde la página del manual de la cola :

   -f,      --follow[={name|descriptor}]
            output appended data as the file grows; -f, 
            --follow, and --follow=descriptor are equivalent

   -F       same as --follow=name --retry

   --retry  keep  trying  to  open  a  file even when it is or becomes
            inaccessible; useful when following by name, i.e., with
            --follow=name

La clave es el --retryinterruptor. Esto le dice al tailcomando que siga intentando volver a seguir un archivo por su nombre. El -Finterruptor hace tanto a -fcomo a --retry.

Utilizando less

Como @StephaneChazela señaló en los comentarios, lo siguiente no funcionará.

tail -F program.log | less

La única otra opción que tiene es usar menos directamente, suponiendo que sea compatible con el --follow-nameinterruptor y lessel archivo directamente, dejando de usarlo por tailcompleto.

less --follow-name program.log
slm
fuente
A veces no me gusta mucho Sun OS ...
Alex Chamberlain
Estoy de acuerdo, trabajé durante años, te vuelve loco que las herramientas tengan como 10 años para algunas de las aplicaciones. No tiene sentido. Este sitio fue invaluable para mantener su cordura en Solaris: sunfreeware.com/introduction.html
slm
si quieres más cordura, visita pkgsrc.org :)
sendmoreinfo
Eso no funcionará bien. Porque lessse colgará si haces "G" pr "F". Lo que puedes interrumpir haciendo "Ctrl-C", pero luego mata la cola. Luego puede inmunizar la cola a Ctrl-C, pero aún no es muy útil.
Stéphane Chazelas
Con respecto a la cola de GNU: consulte esto para obtener información sobre qué herramientas deberían estar disponibles en cualquier host Solaris. (En realidad, la cola GNU está allí por defecto en Solaris 11). Los administradores de sistemas de Solaris a menudo dificultan a sus usuarios porque dejan la instalación en la instalación más básica, mientras que las herramientas GNU para Solaris están actualmente disponibles directamente de Oracle o, en algunos casos, parte de la instalación predeterminada. No hay razón para no hacerlo parte de su instalación. No hay razón para ir a repositorios 'no oficiales'. Ver enlace.
unixhacker2010