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 -f
sesió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 tail
sin saber el nombre; si lo supieras, tail --follow=name --retry
funcionarí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 inotifywait
observe la aparición del archivo y luego comience tail -f
a seguirlo.
Respuesta2
Si no conoce el nombre del archivo de antemano:
- decidir sobre un nombre de archivo, como
foo.log
- mira ese archivo:
tail -F foo.log
(no importa si foo existe o no) - 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.