Tengo un software que rota sus archivos de registro cuando se reinicia. Sin embargo, durante el desarrollo, lo reinicio con frecuencia, por lo que me gustaría monitorear el archivo de registro más reciente en cualquier momento.
Si empiezo less
normalmente less program.log
y presiono Shift+ fhasta el final, cuando se gira el archivo de registro, continúo monitoreando el archivo de registro anterior. Supongo que esto se debe a que el número de inodo permanece igual y less
tiene un identificador de archivo abierto para ese inodo.
¿Es posible monitorear la actividad más reciente 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.
Respuesta1
Úselo less --follow-name
si su versión less
lo admite.
Esa opción se introdujo en la versión 416.
Luego haga un comando de seguimiento normal Shift+Fdentro de less
.
Respuesta2
La less
opción --follow-name
es sólo una parte de la solución;
Para reemplazar tail -F
, se necesita otro argumento:
less --follow-name +F file.log
La opción por sí sola "me gusta" less --follow-name file.log
en realidad 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 comportamientode menos.
Hace que la clave de comando ShiftFdentro de less
follow se base en el nombre del archivo, no en el descriptor del archivo.
Además, no existe una opción normal para iniciar less
en modo de seguimiento.
Pero puedes usar la línea de comando para darpulsaciones de teclas para ejecutardespués del inicio, anteponiendoles el prefijo +
.
Al combinar la opción modificadora con +F
, less
en realidad comenzará en el modo de seguimiento (modificado).
Úselo +F
solo para el equivalente de simple tail -f
:
less +F file.log
Respuesta3
Acabo de encontrar la respuesta en estas preguntas y respuestas de U&L tituladas:¿Cómo hacer un tail -f
registro de archivos rotados?.
Usando tail
:
(si instalar GNU tail en su sistema es una opción)
tail -F program.log
Desde elpágina de manual de 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 --retry
interruptor. Esto le indica al tail
comando que siga intentando seguir un archivo por su nombre. El -F
interruptor hace tanto a -f
como a --retry
.
Usandoless
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, asumiendo que admite el --follow-name
cambio y less
el archivo directamente, renunciando a usarlo tail
por completo.
less --follow-name program.log