如何将 vmstat 输出插入到始终仅维护最新条目的文件中

如何将 vmstat 输出插入到始终仅维护最新条目的文件中

我想每 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条目(最新的条目),以便文件不会增长。

相关内容