Minulla on työ eräajojärjestelmässä, joka toimii erittäin pitkään ja tuottaa tonnia ulostuloa. Niin paljon, että minun on syötettävä vakiolähtö gzip: n läpi, jotta eräsolmu ei täytä työaluettaan ja kaatuu myöhemmin.

longscript | gzip -9 > log.gz 

Nyt haluaisin haluaisin tutkia työn tuloksia, kun se on vielä käynnissä. Joten teen tämän:

gunzip log.gz 

Tämä toimii hyvin kauan, koska se on valtava tiedosto (useita Gt). Näen, että ulostulotiedosto luodaan sen ollessa käynnissä, ja voin tarkastella sitä sen rakentamisen aikana.

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

Viime kädessä kuitenkin gzip kohtaa lopun gzip-tiedostosta. Koska työ on edelleen käynnissä ja gzip kirjoittaa edelleen tiedostoa, oikeaa alatunnistetta ei vielä ole, joten näin tapahtuu:

gzip: log.gz: unexpected end of file 

Tämän jälkeen purettu loki tiedosto poistetaan, koska gzip uskoo, että vioittuneista puretuista tiedoista ei ole minulle hyötyä. Olen kuitenkin eri mieltä – vaikka pari viimeistä riviä sekoitettaisiin, tulos on silti minulle erittäin mielenkiintoinen.

Kuinka voin vakuuttaa gzipin antamaan minun pitää ”vioittunut” tiedosto?

Kommentit

Vastaa

Tiedoston aivan loppupuolen lisäksi näet pakkaamattomat tiedot kohdalla zcat (tai gzip -dc tai gunzip -c):

zcat log.gz | tail 

tai

zcat log.gz | less 

tai

zless log.gz 

gzip tekee puskuroinnin ilmeisistä syistä (sen on pakattava tiedot paloiksi), joten vaikka ohjelma on saattanut antaa joitain tietoja, kyseiset tiedot eivät välttämättä ole vielä log.gz tiedosto.

Voit myös tallentaa pakkaamattoman lokin

zcat log.gz > log 

… mutta se olisi typerää, koska siellä on ilmeisesti syy miksi pakkaat lähdön ensisijaisesti.

Kommentit

  • Katso gunzip < log.gz järjestelmille, joissa zcat toimii vain .Z -tiedostoissa.

Vastaa

Jos ymmärrän oikein, haluat tehdä jotain esimerkiksi tail -f yhä kasvavan gzip-tiedoston kanssa tiedosto: Olen ”kehittänyt gztool , joka voi tehdä sen (muun muassa):

$ gztool -T log.gz 

ja se lähettää konsoliin jatkuvasti, odottaen uusia tietoja tarvittaessa.

Huomaa, että gztool luo myös hakemistotiedoston (log.gzi tässä tapauksessa), mikä tekee tulevista hännistä tai muista satunnaisista pääsyistä gzip-tietoihin gztool -toiminnolla melkein välittömästi. Jos et halua luoda hakemistoa (vaikka se on 0,3% / gzip-koko eikä pidennä käsittelyaikaa), voit luoda sen -W -toiminnon avulla.

vastaus

Voit yrittää jakaa tiedoston ja gzip: n sen jokaisella: https://stackoverflow.com/a/2016918/3090950

Voisitko silti suorittaa komennon tarkassa tilassa? Tämä antaa sinulle lisätietoja.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *