Redirecionando o iostat saída para um arquivo
Pergunta
Por que a saída do iostat não é redirecionada para o arquivo no seguinte comando:
iostat -x 3 | awk '/sda/ { print $11, $12}' > /tmp/disk_utilization
É o iostat comportar de forma diferente do que qualquer outro comando?
Thx antecipadamente
Solução
Parece que você precisa para adicionar um contador para informar o fluxo quando terminar( man iostat ).Você está apenas adicionando o intervalo:
If the interval parameter is specified without the count parameter, the iostat command generates reports continuously.
Quando eu tentar:
iostat -x 3 6 | awk '/sda/ { print $11, $12}' > outfile
o 6
diz iostat
para parar após 6 iterações de 3 intervalos de segunda.Depois de iterações iostat
completa e eu ter uma output
arquivo.
Como alternativa, você pode escolher alguma expressão para causar o script awk para sair.Quando eu tentar:
iostat -x 3 | awk -v max=10 '/sda/ { print $11, $12; max++ } NR > max { exit } ' > outfile2
Eu recebo apenas 3 linhas output2
o que faz sentido porque iostat -x
produz cerca de um telas pena de linhas de saída para a tela.
Você também pode forçar o awk para fflush(stdout)
em cada ciclo de impressão:
iostat -x 3 | awk '/sda/ { print $11, $12; fflush(stdout) }' > output3
e, em seguida, feche iostat
com um <ctrl+c>
a partir do shell.
Outras dicas
A causa do seu problema é que o pipe é tamponada (provavelmente 4k
), por isso, se você esperar o tempo suficiente para a saída a ser liberados para o arquivo deixará de ser vazio.