Tail -f en archivos recién creados con nombres desconocidos

Tail -f en archivos recién creados con nombres desconocidos

Tengo un programa que para cada ejecución genera un nuevo archivo de registro. Para ver lo que está pasando, me gustaría iniciar tail -fsesión; el único problema es que no sé el nombre del archivo de antemano.

Entonces, ¿hay alguna manera de seguir todos los archivos que coinciden con un determinado patrón (shell global)? Supongo que fácilmente podría escribir algo como esto, pero me pregunto si ya existe una solución.

Respuesta1

No creo que haya una forma directa de hacerlo tailsin saber el nombre; si lo supieras, tail --follow=name --retryfuncionaría y esperaría a que apareciera el archivo y luego comenzaría a seguirlo.

Sugeriría escribir un pequeño script de shell que inotifywaitobserve la aparición del archivo y luego comience tail -fa seguirlo.

Respuesta2

Si no conoce el nombre del archivo de antemano:

  1. decidir sobre un nombre de archivo, comofoo.log
  2. mira ese archivo: tail -F foo.log(no importa si foo existe o no)
  3. use una herramienta para observar el directorio en busca de cambios de archivos y ejecutar un comando

Para el comando, ya sea:

  • mueva el nuevo archivo para sobrescribir foo.log mv the_new_file_which_appeared foo.log(si el registro de la aplicación se abre una vez, esto funcionará bien)
  • o simplemente enlace simbólico: ln -s the_new_file_which_appeared foo.log- y la cola debería captar eso.

Para ver correctamente los directorios (paso 3), necesita una herramienta inteligente y configurable.

Personalmente, usaríaGuardiacon elGuardia::Proceso.

En la práctica, Guard no es mucho más pesado que usar scripts de shell (es una capa delgada encima de inotify en Linux), y todo es muy rápido y fácil de configurar.

información relacionada