非常に長く実行され、大量の出力を生成するバッチシステムでジョブがあります。実際には、バッチノードが作業領域を埋めてクラッシュしないように、gzipを介して標準出力をパイプ処理する必要があります。

longscript | gzip -9 > log.gz 

これで、それがまだ実行されている間にジョブの出力を調査するのが好きです。だから私はこれを行います:

gunzip log.gz 

これは巨大なファイル(数GB)であるため、非常に長く実行されます。実行中に作成されている出力ファイルを確認でき、ビルド中に確認できます。

tail log > some-line-of-the-log-file tail log > some-other-line-of-the-log-file 

ただし、最終的にgzipで終わりが発生します。 gzip圧縮されたファイルの。ジョブはまだ実行中であり、gzipはまだファイルを書き込んでいるため、適切なフッターがまだないため、次のようになります。

gzip: log.gz: unexpected end of file 

この後、抽出されたログ破損した抽出データは役に立たないとgzipが判断したため、ファイルが削除されました。ただし、同意しません。最後の数行がスクランブルされていても、出力は非常に興味深いものです。

「破損した」ファイルを保持するようにgzipを説得するにはどうすればよいですか?

コメント

回答

ファイルの最後を除いて、zcat(またはgzip -dc、またはgunzip -c):

zcat log.gz | tail 

または

zcat log.gz | less 

または

zless log.gz 

gzipは明らかな理由でバッファリングを行います(データをチャンクに圧縮する必要があります)。そのため、プログラムが一部のデータを出力したとしても、そのデータはまだlog.gzにない可能性があります。ファイル。

非圧縮ログを

zcat log.gz > log 

…で保存することもできますが、明らかにそもそも出力を圧縮する理由。

コメント

  • 代わりにgunzip < log.gzを参照してください。 div id = “a15 zcat.Zファイルでのみ機能するシステムの場合はd60b5bc “>

回答

正しく理解できれば、まだ成長しているgzipでtail -fのようなことをしたいと思います。ファイル:私は(とりわけ)それを実行できる gztool を開発しました:

$ gztool -T log.gz 

そしてそれは継続的にコンソールに出力され、必要なときに新しいデータを待ちます。

gztoolもインデックスファイル(log.gziこの場合)これにより、gztoolを使用してgzipデータへの将来のテールまたはその他のランダムアクセスがほぼ瞬時に行われます。インデックスを作成したくない場合(0.3%/ gzipサイズで処理時間が長くならない場合でも)、-Wを使用してインデックスを作成しないでください。

回答

ファイルを分割して、それぞれをgzipで圧縮することができます: https://stackoverflow.com/a/2016918/3090950

とにかく、コマンドを冗長モードで実行できますか?これにより、より多くの情報が提供されます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です