Como fazer o tailf contra um arquivo que é rolado a cada 500MB / dia?

0

Eu gostaria de fazer o seguinte para monitorar um padrão em um arquivo de log:

tail -f ./app.log | grep "My Pattern: .*" >> ./MyPattern.txt &

Isso está funcionando bem até que app.log atinja 500 MB e seja movido para app-2015-10-28.0.log e um novo app.log seja criado. Quando isso acontecer, o tail -f irá parar de funcionar. Parar e executar o mesmo comando novamente funcionará, mas entre parar e iniciar, o padrão que aparece entre o reinício pode ser perdido.

Outra condição de rolagem é quando é 00:00. O mesmo rolamento acontecerá mesmo quando o registro for < 500MB.

A rolagem do log é feita no nível do aplicativo e não podemos controlar essa parte.

Como podemos detectar o log foi rolado, sem perder os padrões de interesse?

    
por Ric Yik 27.10.2015 / 23:25

1 resposta

1

tail normalmente segue o descritor de arquivo ( --follow=descriptor ), que fica inacessível quando o arquivo de log é transferido ou o arquivo é movido. Veja isso na página do manual de tail :

--retry

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

Portanto, use-o assim ( tail segue o nome e não o descritor agora):

tail --follow=name --retry logfile | grep "pattern"

Você verá na saída de caudas, quando o arquivo for truncado ou removido:

$ tail --follow=name --retry logfile
[...]
tail: logfile: file truncated
[...]
tail: 'logfile' has become inaccessible: No such file or directory
tail: 'logfile' has appeared;  following end of new file
[...]
    
por 27.10.2015 / 23:43

Tags