Como fazer um `tail -f` de arquivos rotacionados em log?

106

Em um sistema de longa duração, geralmente tenho um terminal com

$ tail -f /var/log/kern.log

ou algo assim aberto.

Mas, de tempos em tempos, tenho que reiniciar esse comando, porque nenhuma nova mensagem é exibida.

Suponho que isso ocorra devido ao trabalho rotativo de log que substituiu o arquivo de log tail -festar 'assistindo'.

Como evitar esses problemas de reinicialização?

Posso invocar para tailque ele observe o processo de rotação e faça a coisa certa?

(Percebo esse problema em um sistema Ubuntu 11.04 que usa rsyslogdpor padrão.)

maxschlepzig
fonte
2
Veja também: Unix.stackexchange.com/questions/196168/…
Volker Siegel

Respostas:

162

Use a -Fopção:

tail -F /var/log/kern.log

A -Fopção informa tailpara rastrear alterações no arquivo por nome do arquivo, em vez de usar o número do inode que muda durante a rotação. Ele também continuará tentando abrir o arquivo se ele não estiver presente.

andcoz
fonte
7
Incrível, sim, eu sou. (apenas para constar, esta é uma opção do GNU tail - onde o GNU tail é obviamente o padrão no Ubuntu).
maxschlepzig
Você está certo: - / Eu não percebi que o Ubuntu na sua pergunta era apenas um exemplo.
andcoz
não é um problema - eu apenas comentei a integridade (às vezes eu só quero olhar o que é POSIX e o que não é). A questão realmente era sobre o Ubuntu.
maxschlepzig
11
É tail -F /var/log/kern.logequivalente a tail -f --follow=name --retry /var/log/kern.log?
Basj
11
@Basj - de acordo com man7.org/linux/man-pages/man1/tail.1.html é equivalente
andrej