Tail -f em arquivos recém-criados com nomes desconhecidos

Tail -f em arquivos recém-criados com nomes desconhecidos

Tenho um programa que para cada execução gera um novo arquivo de log. Para ver o que está acontecendo, gostaria de ver tail -fo log - o único problema é que não sei o nome do arquivo com antecedência.

Então, existe uma maneira de seguir todos os arquivos que correspondem a um determinado padrão (shell glob)? Acho que poderia facilmente criar algo assim, mas estou me perguntando se já existe uma solução por aí.

Responder1

Eu não acho que exista uma maneira direta de fazer isso tailsem saber o nome - se você soubesse disso, tail --follow=name --retryfuncionaria e esperaria o arquivo aparecer e então começaria a segui-lo.

Eu sugiro escrever um pequeno script de shell que inotifywaitobserve o arquivo aparecer e então comece tail -fa segui-lo.

Responder2

Se você não souber o nome do arquivo com antecedência:

  1. decida um nome de arquivo, comofoo.log
  2. observe esse arquivo: tail -F foo.log(não importa se foo existe ou não)
  3. use uma ferramenta para observar o diretório em busca de alterações de arquivo e execute um comando

Para o comando:

  • mova o novo arquivo para substituir foo.log mv the_new_file_which_appeared foo.log(se o log do aplicativo abrir uma vez, isso funcionará bem)
  • ou apenas link simbólico: ln -s the_new_file_which_appeared foo.log- e tail deve capturar isso.

Para monitorar adequadamente os diretórios (etapa 3), você precisa de uma ferramenta inteligente e configurável.

Pessoalmente, eu usariaGuardacom oGuarda::Processo.

Na prática, o Guard não é muito mais pesado do que usar shell scripts (é uma camada fina sobre o inotify no Linux) e é muito rápido e fácil de configurar.

informação relacionada