Reindirizzamento dell'output iostat a un file
Domanda
Perché l'output di iostat non viene reindirizzato al file nel seguente comando:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
iostat si comporta in modo diverso rispetto a qualsiasi altro comando?
Thx in anticipo
Soluzione
Sembra che sia necessario aggiungere un conteggio per dire al flusso quando terminare( uomo iostato ).Stai solo aggiungendo l'intervallo:
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
Quando ci provo:
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
il 6
dire iostat
per fermarsi dopo 6 iterazioni di intervalli di 3 secondi.Dopo le iterazioni iostat
completa e ottengo un output
file.
In alternativa, è possibile scegliere un'espressione per far uscire lo script awk.Quando ci provo:
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
Ho solo 3 linee in output2
il che ha senso perché iostat -x
produce circa un valore di schermi di linee di output sullo schermo.
Potresti anche forzare l'awk a fflush(stdout)
in ogni ciclo di stampa:
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
e poi chiudere iostat
con un <ctrl+c>
dal guscio.
Altri suggerimenti
La causa del tuo problema è che il tubo è tamponato (probabilmente 4k
), quindi se si attende abbastanza a lungo per l'output da scaricare al file che non sarà più vuoto.