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
エントリ(最新のエントリ)を含める必要がありますが、ファイルは大きくなりません。