vmstat -n 1 | (while read; do echo "$(date +%Y%m%d.%H%M%S) $REPLY"; done) | tail -n +3
Existe uma maneira de executar o comando VMSTAT (ou algo parecido) e ter um timestamp incluído na linha? Eu sei que posso canalizar a saída do comando e manipular os resultados, mas, se eu fizer isso, receberei informações indesejadas; Disseram-me que a primeira linha do VMSTAT contém dados falsos, e eu estaria essencialmente recebendo uma lista repetida de primeiras linhas.
Existe uma maneira de obter este tipo de dados, seja com VMSTAT ou algo similar:
20090826.134908 0 0 0 241832 120064 3023856 0 0 0 1 0 0 0 0 100 0
Obrigado!
Vingador IVR
vmstat -n 1 | (while read; do echo "$(date +%Y%m%d.%H%M%S) $REPLY"; done) | tail -n +3
while sleep 1 ; do echo 'date '+%Y%m%d.%H%M%S'' 'vmstat | head -3 | tail -1' ; done
Sar pode funcionar melhor:
Eu recomendaria o comando sar, que faz parte do pacote sysstat. Por padrão, isso inclui timestamps e há opções para obter todos os tipos de dados. O uso mais básico seria apenas:
sar 1 3 #interval of 1, for a count of 3
Veja 'man sar' para obter estatísticas de memória e paginação.
Se você usa vmstat:
Se você for usar o vmstat, uma vez que o terminal esteja cheio, ele irá imprimir o cabeçalho novamente (pelo menos minha versão GNU), então use a opção -n para suprimir isso.
Não tenho certeza do que você quer dizer com "se eu [manipular os resultados], receberei informações de lixo eletrônico". Você pode fazer algo assim:
vmstat 8 | sed '3d'
Isso removerá a linha que sempre é dito para ignorar. Como alternativa, se você quiser remover isso e o cabeçalho também:
vmstat 8 | sed '1,3d'
Isso também cuidará do cabeçalho. Se o cabeçalho se repetir, você pode usar algo assim:
vmstat 8 | sed '3d; /memory/d; /free/d;'
No meu caso, "memória" estava na linha 1 e "livre" na linha 2; substitua por suas próprias seqüências apropriadas.
Aqui está uma solução rápida e suja:
while true; do date;vmstat 1 2|tail -n1; done
A propósito, a primeira linha não é falsa - ela contém médias desde a última reinicialização.
I know that I can pipe the output of the command and manipulate the results, but if I do that, I'll get junk information
Não tenho certeza do que você quer dizer com isso. Se os comandos não derem a saída que você deseja, não consigo pensar em nada além de canalizar e formatar a saída.
De qualquer forma, isso produz o formato que você deseja.
$ date='date "+%Y%m%d.%H%M%S"' && vmstat='vmstat | tail -1' && echo $date$vmstat
20090827.175715 3 1 8 116848 121072 599320 0 0 0 4 3 6 0 0 100 0