Alternativa para “tail -f” que segue o nome do arquivo

59

Eu tenho alguns logs sendo gerados usando um registrador de arquivos rotativo cronometrado. Isso registra em um arquivo chamado tool.log e à meia-noite, move isso para tool.log.<date> e inicia um novo tool.log .

Eu tenho um tail -f tool.log em execução na máquina para ficar de olho nos registros, mas à meia-noite, quando tool.log é renomeado para tool.log.<date> , tail continua assistindo ao arquivo renomeado.

O que eu espero é uma ferramenta semelhante a tail , mas continuará monitorando o arquivo chamado tool.log , em vez de seguir o inode.

Existe algo assim? Se não, eu posso escrever o meu em Python para esse propósito.

    
por Hugh 29.03.2016 / 14:10

6 respostas

89

Algumas implementações de tail têm uma opção para isso; aqui está a descrição da página man do GNU tail:

-F
same as --follow=name --retry

-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent

--retry
keep trying to open a file even when it is or becomes inaccessible; useful when following by name, i.e., with --follow=name

Como esta opção não é especificada por POSIX, você não pode depender dela em todos os lugares. Algumas implementações conhecidas:

  • GNU - tem -F como descrito acima
  • Mac OS X , FreeBSD e NetBSD - tem uma opção -F semelhante com o mesmo efeito
  • OpenBSD - -f é suficiente (se o arquivo for substituído (isto é, o número de inode é alterado), o tail reabrirá o arquivo e continuará)
  • Solaris - sem equivalente
  • Busybox - -F está disponível em versões recentes, mas deve ser compilado com ENABLE_FEATURE_FANCY_TAIL (não é compilado por padrão)
por 29.03.2016 / 16:39
55

Alternativa é o comando tail -F .

A opção -F implica na opção --follow=name with --retry , por isso tail está a ver o seu ficheiro, mesmo que tenha sido eliminado e criado novamente.

    
por 29.03.2016 / 14:54
4

Outra alternativa seria usar o comando watch , que irá repetir qualquer comando a cada n segundos, a cada 2 segundos neste exemplo:

watch -n2 "tail tool.log"

Use Ctrl + C para sair do comando quando terminar de ver o registro.

    
por 31.03.2016 / 16:54
3

lnav é outra ferramenta fantástica que segue o nome do arquivo.

Você também pode apontá-lo para um diretório e seguir todos os arquivos desse diretório, além de todos os outros recursos interessantes.

    
por 31.03.2016 / 22:13
3

Desde que você tenha solicitado alternativa :

O utilitário less pode ser uma alternativa para tail -F .

Terá que ser executado da seguinte forma: less --follow-name filename.log e pressionar Shift + F .

Isso lhe dará os mesmos resultados que tail -F .

    
por 11.05.2016 / 20:29
1

Não tenho certeza se multitail cuidará do seu caso específico, mas aposto que sim. multitail faz praticamente tudo que você poderia querer que o tail fizesse.

link

    
por 31.03.2016 / 17:01