常に最新のエントリのみを保持するファイルにvmstat出力を挿入する方法

常に最新のエントリのみを保持するファイルにvmstat出力を挿入する方法

10秒ごとにvmstat出力をファイルに挿入したいと思います。これを行うには、次のコマンドを使用します。

vmstat 10 > vmstatfile.txt

これにより、vmstatfile.txtというファイルが作成され、10秒ごとに追加されます。私が望むのは、ファイルが大きくならないように、私のファイルには常にvmstatエントリ(最新のエントリ)を含める必要があるということです。可能ですか?どうすればいいですか?

答え1

引数なしでvmstat単一のレポートが印刷されるため、単純なシェルループでゆっくり実行できます。

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

ただし、最初のレポートは開始後の平均であるため、ファイルに最新の期間のレポートが含まれるようにするには、少なくとも2つのレポートを要求する必要があります。実行されるたびに印刷された最初のレポートを削除するには、削除(3行目の削除)を使用しますsed。ここでは一時ファイルを使用する必要があるため、実際のターゲットファイルにはいつでも部分出力は含まれません。

while true; do 
    vmstat 10 2 | sed -e 3d > vmstatfile.tmp
    mv vmstatfile.tmp vmstatfile.txt
done

答え2

vmstatこれは、ilkkachuが提案したように、10秒ごとに3つの外部コマンドを開始するのではなく、1つの外部コマンドのみを永久に実行し、追加のコマンドを使用しない最も簡単な方法です。

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

最初の10秒間、vmstat.outファイルには最後の再起動以降の平均が含まれます。その後、正確に要求された最新の統計が表示されます。

私のファイルには常に1つのvmstatエントリ(最新のエントリ)を含める必要がありますが、ファイルは大きくなりません。

関連情報