Jai un travail sur un système de traitement par lots qui fonctionne extrêmement longtemps et produit des tonnes de sortie. Tellement en fait que je dois diriger la sortie standard via gzip pour empêcher le nœud de lot de remplir sa zone de travail et de se bloquer par la suite.

longscript | gzip -9 > log.gz 

Maintenant, je le ferais aiment étudier la sortie du travail pendant quil est toujours en cours dexécution. Donc je fais ceci:

gunzip log.gz 

Cela fonctionne très longtemps, car il sagit dun fichier énorme (plusieurs Go). Je peux voir le fichier de sortie en cours de création pendant quil est en cours dexécution et le regarder pendant sa construction.

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

Cependant, finalement, gzip rencontre la fin du fichier gzippé. Comme le travail est toujours en cours dexécution et que gzip est toujours en train décrire le fichier, il ny a pas encore de pied de page approprié, donc ceci se produit:

gzip: log.gz: unexpected end of file 

Après cela, le journal extrait le fichier est supprimé, car gzip pense que les données extraites corrompues ne me sont daucune utilité. Cependant, je ne suis pas daccord – même si les deux dernières lignes sont brouillées, la sortie est toujours très intéressante pour moi.

Comment puis-je convaincre gzip de me laisser conserver le fichier « corrompu »?

Commentaires

Réponse

En dehors de la toute fin du fichier, vous pourrez voir les données non compressées avec zcat (ou gzip -dc, ou gunzip -c):

zcat log.gz | tail 

ou

zcat log.gz | less 

ou

zless log.gz 

gzip fera la mise en mémoire tampon pour des raisons évidentes (il doit compresser les données en morceaux), donc même si le programme peut avoir sorti des données, ces données peuvent ne pas encore être dans le log.gz fichier.

Vous pouvez également stocker le journal non compressé avec

zcat log.gz > log 

… mais ce serait idiot car il y a évidemment un raison pour laquelle vous compressez la sortie en premier lieu.

Commentaires

  • Voir gunzip < log.gz au lieu de pour les systèmes où zcat ne fonctionne que dans les fichiers .Z.

Réponse

Si je comprends bien, vous « aimeriez faire quelque chose comme tail -f avec le gzip toujours en croissance file: Jai développé gztool qui peut faire cela (entre autres):

$ gztool -T log.gz 

et il sera affiché en continu sur la console, en attendant de nouvelles données lorsque cela est nécessaire.

Notez que gztool créera également un fichier dindex (log.gzi dans ce cas) qui rendra les futures queues ou autres accès aléatoires aux données gzip avec gztool presque instantanés. Si vous ne souhaitez pas créer dindex (même sil est de 0,3% / taille gzip et naugmente pas le temps de traitement), vous pouvez utiliser -W pour ne pas le créer.

Réponse

Vous pouvez essayer de diviser le fichier et de gzip chacun deux: https://stackoverflow.com/a/2016918/3090950

Quoi quil en soit, pourriez-vous exécuter la commande en mode détaillé? Cela vous fournira plus dinformations.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *