Como registrar as últimas X linhas de um fluxo contínuo

3

Eu tenho algum código que deve ser executado mais ou menos indefinidamente, no entanto, no caso em que ele falha, eu gostaria de ver sua saída. Existe algum comando ou combinação de comandos que eu possa usar no Linux para armazenar apenas as últimas X linhas do padrão do meu comando para que, se meu código estiver rodando por alguns dias, eu não termine com um arquivo de texto de 100.000 linhas, mas apenas a última palavra, 100 linhas que foram emitidas?
Mais ainda, é possível que esse arquivo de texto tenha sempre apenas as últimas 100 linhas nele, de modo que, se eu fosse visualizá-lo a qualquer momento enquanto meu código estivesse em execução, eu poderia ver o que meu código estava fazendo?

    
por roboctopus 07.06.2016 / 16:30

3 respostas

1

Você está procurando por um "buffer de anel". Serverfault Link do site da irmã para a resposta aceita para o linux:

Como transformar um arquivo de log em uma espécie de buffer circular

    
por 07.06.2016 / 16:37
0

A maneira mais fácil de fazer isso seria fazer com que o programa registrasse em um único arquivo, depois usasse o comando tail no arquivo sempre que quisesse ver o que estava acontecendo recentemente.

    
por 07.06.2016 / 16:31
0

100000 linhas de, digamos, 100 caracteres cada ainda são apenas cerca de 10 MB, por isso não é impossível salvar tudo isso e pesquisar o que você quer, ou apenas ler tail .

No entanto, se você não quiser salvar tudo, terá algumas opções. Para arquivos de log, é comum girar os logs, ou seja, depois que um arquivo é grande o suficiente, ele é renomeado e o programa notificado para reabrir sua saída, que então vai para um novo arquivo com o mesmo nome. Isso pode exigir a modificação do programa se ele não souber como fazer isso nativamente. (Apenas renomear o arquivo não ajudará, já que o identificador de arquivo aberto ainda apontará para o arquivo renomeado.)

Solução alternativa para o problema acima: canalize a saída para logger , envie-a para o syslog e faça a rotação do log na saída, já que o syslog o suportará definitivamente. Negativos: um pouco confuso, pois poluirá arquivos de log não relacionados, a menos que você tenha o cuidado de configurar esses dados de log específicos para um arquivo separado. Também adiciona um pouco de sobrecarga.

Três: execute o programa em screen e defina o tamanho da janela de rolagem para o que você quiser. ( screen -h <N> ao iniciá-lo ou use :scrollback <N> na tela para alterar o tamanho. A rolagem da rolagem na tela pode ser um pouco pouco intuitiva, mas você pode salvar todo o buffer com :hardcopy -h <filename> .

    
por 07.06.2016 / 19:28

Tags