tail -f, mas quando o arquivo é excluído e recriado (não anexado)

2

Estou tentando observar qualquer nova saída de um arquivo de log. Outro script (não sob meu controle) está excluindo o arquivo e criando um novo com o mesmo nome. Usar tail -f não funciona porque o arquivo está sendo excluído.

    
por Caleb Jares 12.12.2017 / 18:32

2 respostas

14

Se o seu tail aceitar, use tail -F , funciona muito bem com o desaparecimento e o reaparecimento de arquivos. Apenas certifique-se de iniciar tail de um diretório que permanecerá no lugar.

-F é breve para --follow=name --retry : tail seguirá os arquivos por nome, em vez de descritor de arquivo, e tentará novamente quando os arquivos estiverem inacessíveis ( por exemplo porque foram excluídos ).

(Vários bugs relacionados a --follow=name com --retry foram corrigidos no coreutils 8.26, então você pode encontrar problemas com versões anteriores; por exemplo, tentando novamente quando o diretório contendo o arquivo final é deleted parece funcionar apenas em todos os casos com a versão 8.26 ou posterior.)

    
por 12.12.2017 / 18:35
2

Dê uma olhada no seu comando tail man, alguns têm:

--follow=name

que instrui tail a observar o nome e não o descritor como ele faz por padrão. Com essa opção, se o arquivo for excluído e recriado, tail o verá. Conforme escrito no manual:

With --follow (-f), tail defaults to following the file descriptor, which means that even if a tail'ed file is renamed, tail will continue to track its end. This default behavior is not desirable when you really want to track the actual name of the file, not the file descriptor (e.g., log rotation). Use --follow=name in that case. That causes tail to track the named file in a way that accommodates renaming, removal and creation.

    
por 12.12.2017 / 18:36

Tags