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

5

Eu tenho um programa que para cada execução gera um novo arquivo de log. Para observar o que está acontecendo, eu gostaria de tail -f o problema somente do log é que eu realmente não sei o nome do arquivo antecipadamente.

Portanto, existe uma maneira de seguir todos os arquivos que correspondem a um determinado padrão (shell glob)? Eu acho que poderia facilmente escrever algo como isto, mas eu estou querendo saber se já existe uma solução lá fora.

    
por Dave Vogt 01.11.2012 / 13:25

2 respostas

5

Eu não acho que haja uma maneira direta de fazer com tail sem saber o nome - se você soubesse disso, então tail --follow=name --retry funcionaria e ele esperaria o arquivo aparecer e então começaria a segui-lo. / p>

Sugiro escrever um pequeno script de shell que use inotifywait para observar o arquivo que aparece e, em seguida, inicie tail -f para segui-lo.

    
por 01.11.2012 / 14:41
1

Se você não souber o nome do arquivo antecipadamente:

  1. decide um nome de arquivo, como foo.log
  2. assista esse arquivo: tail -F foo.log (não importa se foo existe ou não)
  3. use uma ferramenta para assistir ao diretório para alterações de arquivo e executar um comando

Para o comando:

  • mova o novo arquivo para sobrescrever foo.log mv the_new_file_which_appeared foo.log (se o registro do aplicativo for aberto uma vez, isso funcionará bem)
  • ou apenas symlink: ln -s the_new_file_which_appeared foo.log - e a cauda deve pegar isso.

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

Pessoalmente, eu usaria Guarda com o Guard :: Process .

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

    
por 04.07.2015 / 15:00