潜在的に切り捨てられる gzip ログファイルのマージ

潜在的に切り捨てられる gzip ログファイルのマージ

毎日マージする必要がある複数のログファイルがあります。それぞれは異なるサーバーによって提供されます。ファイルをそこに置く操作が時々中断され、ファイルが切り捨てられます。この場合、ファイルは次回実行時に別の名前で記録されます。したがって、次のログファイルのリストが生成されることがあります。

  • server-1-log.gz(昨日のログファイル)
  • server-1-log.1.gz(今日のログファイルは転送中に中断され、切り捨てられました。)
  • server-1-log.2.gz(今日のログファイルは再送信され、そのまま残ります)
  • server-2-log.gz(昨日のログファイル)
  • server-2-log.1.gz(今日のログファイル)

すべてのログファイルは各行のタイムスタンプで始まるため、ソートと重複排除は非常に簡単です。次のコマンドを使用してこれらのファイルをマージしようとしました。

zcat *.gz | sort | uniq | gzip > /tmp/merged.gz

問題は、切り捨てられたログファイルが次のエラーを生成することですzcat

gzip: server-1-log.1.gz: 予期しないファイルの終わり

zcatでこのエラーが発生すると、他のファイルからすべてのデータを読み取ることなく完全に終了することがわかりました。ファイルの1つが破損しているため、良いファイルにあったデータが失われました。この問題をどのように解決できますか?

  • zcatエラーが発生して終了しないようにできますか?マニュアルページには何も表示されません。
  • 呼び出す前に切り捨てられたgzipファイルを変更できますかzcat
  • 他のストレス軽減ルーチンを使用できますか?

ベストアンサー1

私はあなたが使用しているスクリプトのgzipバージョンを推測していますzcat。単に実行されるgzip -dcだけでエラーが発生した場合、エラーを無視して停止するように指示することはできません。

個々の破損したアーカイブに対する文書化された修正は、そのアーカイブを実行することであるため、zcatそこではあまり役に立ちません。

ファイルを処理するには、ファイルを繰り返すか(ループまたは見つかったforものxargsと似たものを使用)、次のいずれかを使用できます。ジュティルズzcatエラーが発生しても処理を続けるバージョンがあります。

おすすめ記事