O terminal para de gravar sua saída no arquivo se o arquivo for alterado

0

Eu tenho um processo em execução que foi iniciado usando

./process | tee -a output.txt

Como esse é um processo bastante longo, o arquivo de saída é grande e toda vez que eu abri-lo para verificar, eu tenho que esperar que ele seja carregado e, em seguida, tenho que rolar para baixo, o que não é conveniente. Portanto, decidi mover o conteúdo atual para um arquivo de backup output_bak.txt e deixar o atual output.txt blank para que ele contenha apenas uma nova saída. Infelizmente isso não funcionou. O processo não grava mais em output.txt .

Minha pergunta é como deixar o processo continuar escrevendo para output.txt ?

Agradeço antecipadamente por sua ajuda!

Atualização: O que eu quis dizer com 'mover o conteúdo' é, na verdade, copiar o conteúdo do arquivo para outro arquivo e, em seguida, excluir o conteúdo do arquivo atual. Mais precisamente, o que eu fiz foi: abra output.txt , pressione Ctrl + A para copiar o conteúdo e depois Ctrl + V em output_bak.txt , depois volte para output.txt e Ctrl + A e depois Apague e salve.

    
por Khue 24.04.2018 / 10:24

1 resposta

2

Você não pode. Quando você abre um arquivo, o processo recebe um identificador de arquivo. O identificador de arquivo não muda mesmo se o arquivo for movido ou removido . Assim, o processo será gravado no mesmo identificador de arquivo, que você moveu para output_bak.txt . Você terá que fechar um arquivo e reabri-lo.

Você pode usar utilitários unix como tail para visualizar o final do arquivo. tail -n 20 output.txt produzirá as últimas 20 linhas de output.txt .

O tail também pode fornecer uma visualização ao vivo. tail -f output.txt mostrará o conteúdo à medida que é gravado no arquivo, em um fluxo contínuo, até que você o interrompa com Ctrl + c .

Isto é, a propósito, como o logrotate funciona. Mova o arquivo, crie um novo arquivo vazio e reinicie o processo de gravação no arquivo de log.

    
por vidarlo 24.04.2018 / 10:30