Eu tenho um trabalho em um sistema em lotes que é extremamente longo e produz toneladas de saída. Tanto que, na verdade, tenho que canalizar a saída padrão através do gzip para impedir que o nó do lote preencha sua área de trabalho e, subsequentemente, falhe.
longscript | gzip -9 > log.gz
Agora, gostaria de investigar a saída do trabalho enquanto ele ainda está em execução. Então eu faço isso:
gunzip log.gz
Isso dura muito tempo, pois é um arquivo enorme (vários GB). Eu posso ver o arquivo de saída sendo criado enquanto está em execução e posso vê-lo enquanto está sendo construído.
tail log
> some-line-of-the-log-file
tail log
> some-other-line-of-the-log-file
No entanto, finalmente, o gzip encontra o final do arquivo compactado. Como o trabalho ainda está em execução e o gzip ainda está gravando o arquivo, ainda não há rodapé adequado; portanto, isso acontece:
gzip: log.gz: unexpected end of file
Depois disso, o arquivo de log extraído é excluído, pois o gzip pensa que os dados extraídos corrompidos não têm utilidade para mim. Porém, eu discordo - mesmo que as duas últimas linhas sejam embaralhadas, a saída ainda é muito interessante para mim.
Como convencer o gzip a me deixar manter o arquivo "corrompido"?
gunzip -c
escreve saída para stdout ... talvez seja isso que você está procurando? Mantém o original inalterado.Respostas:
Além do final do arquivo, você poderá ver os dados não compactados com
zcat
(ougzip -dc
, ougunzip -c
):ou
ou
gzip
fará buffer por razões óbvias (ele precisa compactar os dados em partes), portanto, mesmo que o programa tenha produzido alguns dados, esses dados ainda não podem estar nolog.gz
arquivo.Você também pode armazenar o log não compactado com
... mas isso seria bobagem, pois obviamente existe uma razão pela qual você comprime a saída em primeiro lugar.
fonte
gunzip < log.gz
vez dezcat log.gz
sistemas ondezcat
apenas funciona em.Z
arquivos.Se eu entendi direito, você gostaria de fazer algo parecido
tail -f
com o arquivo gzip que continua crescendo: desenvolvi o gztool que pode fazer isso (entre outras coisas):e ele será enviado para o console continuamente, aguardando novos dados quando necessário.
Note que
gztool
também criará um arquivo de índice (log.gzi
neste caso) que fará com que caudas futuras ou outros acessos aleatórios aos dados gzip sejamgztool
quase instantâneos. Se você não deseja criar um índice (mesmo que o tamanho seja de 0,3% / gzip e não aumente o tempo de processamento), use-o-W
para não criá-lo.fonte
Você pode tentar dividir o arquivo e compactar com gzip cada um deles: https://stackoverflow.com/a/2016918/3090950
Enfim, você poderia executar o comando no modo detalhado? Isso fornecerá mais informações.
fonte