我想每 10 秒将 vmstat 输出插入到一个文件中。我使用以下命令来执行此操作。
vmstat 10 > vmstatfile.txt
这将创建一个名为 vmstatfile.txt 的文件,并每 10 秒追加一次。我想要的是,我的文件应该始终包含一个 vmstat 条目(最新的条目),以便文件不会增长。这可能吗?那我该怎么办呢?
答案1
好吧,如果没有参数,vmstat
则会打印单个报告,因此您可以在一个简单的 shell 循环中延迟运行它:
while true; do
vmstat > vmstatfile.txt
sleep 10
done
但是,第一个报告是自启动以来的平均值,因此如果您希望文件包含最近一段时间的报告,则必须要求至少两个报告。如果您想删除每次运行时打印的第一个报告,您可以使用 删除它(删除第三行)sed
。我们必须在这里使用临时文件,因此实际的目标文件在任何时候都不会包含部分输出。
while true; do
vmstat 10 2 | sed -e 3d > vmstatfile.tmp
mv vmstatfile.tmp vmstatfile.txt
done
答案2
这是最简单的方法,只有一个外部命令永远运行(vmstat
)并且没有额外的命令,而不是按照 ilkkachu 的建议每十秒启动三个外部命令:
vmstat 10 | while read line; do
echo "$line" > vmstat.out
done
在前十秒内,该vmstat.out
文件将包含自上次重新启动以来的平均值。之后,将会出现最新的统计数据,这正是所要求的:
我的文件应始终包含一个
vmstat
条目(最新的条目),以便文件不会增长。