Como inserir a saída do vmstat em um arquivo mantendo apenas a entrada mais recente sempre

2

Eu quero inserir a saída do vmstat em um arquivo a cada 10 segundos. Eu uso o seguinte comando para fazer isso.

vmstat 10 > vmstatfile.txt

Isso criará um arquivo denominado vmstatfile.txt e será anexado a ele, a cada 10 segundos. O que eu quero é que meu arquivo deve sempre conter uma única entrada vmstat, a mais recente, para que o arquivo não cresça. Isso é possível? Então como posso fazer isso?

    
por blasteralfred Ψ 16.03.2017 / 15:22

2 respostas

3

Bem, sem um argumento vmstat imprime um único relatório, então você pode executá-lo em um loop de shell simples com um atraso:

while true; do 
    vmstat > vmstatfile.txt
    sleep 10
done

No entanto, esse primeiro relatório é a média desde a inicialização, portanto, se você quiser que o arquivo contenha um relatório para o período mais recente, precisará solicitar pelo menos dois relatórios. Se você quiser se livrar do primeiro relatório impresso em cada execução, poderá removê-lo (excluir a terceira linha) com sed . Teremos que usar um arquivo temporário aqui, então o arquivo de destino atual não conterá saída parcial em nenhum ponto.

while true; do 
    vmstat 10 2 | sed -e 3d > vmstatfile.tmp
    mv vmstatfile.tmp vmstatfile.txt
done
    
por 16.03.2017 / 15:40
0

Aqui está a maneira mais simples de fazê-lo, com apenas um único comando externo em execução ( vmstat ) e nenhum comando extra em vez de três comandos externos iniciados a cada dez segundos com a sugestão do ilkkachu:

vmstat 10 | while read line; do
    echo "$line" > vmstat.out
done

Durante os primeiros dez segundos, o arquivo vmstat.out conterá os valores médios desde a última reinicialização. Posteriormente, as estatísticas atualizadas estarão lá, exatamente o que foi solicitado:

my file should always contain a single vmstat entry, the latest one, so that the file will not grow.

    
por 18.03.2017 / 01:36

Tags