我希望能够使用sar收集系统CPU信息,并希望有一个文件包含收集的所有数据,第二个文件只存储最后一个条目。
下面的输出将是我的measurements.txt文件
14:54:45 CPU %user %nice %system %iowait %steal %idle
14:54:48 all 6.12 0.00 35.03 2.72 0.00 56.12
14:54:51 all 6.23 0.00 34.60 0.00 0.00 59.17
14:54:54 all 9.69 0.00 47.75 0.35 0.00 42.21
14:54:57 all 5.23 0.00 31.71 1.39 0.00 61.67
14:55:00 all 7.14 0.36 33.21 0.00 0.00 59.29
14:55:03 all 6.23 0.00 32.53 1.04 0.00 60.21
14:55:06 all 7.89 0.00 30.82 0.00 0.00 61.29
14:55:09 all 8.51 0.00 31.91 3.55 0.00 56.03
从14:55:09开始的最后一个条目将是我的last_entry.txt文件中的唯一条目。
但是,无论何时我尝试这样做,我都无法从last_entry.txt文件中的sar命令中获取最后一个条目。我已经能够将sar输出发送到measured.txt文件,如示例所示,但这是我真正努力的最后一部分。
在一个阶段,我设法得到一个输出到last_entry.txt文件,但它不是最后一个条目,所以我猜测我的脚本中的那部分可能只执行一次。问题是,我不知道如何让它继续获得最后一个条目,直到我取消它。
这是我的脚本代码,它将sar的输出发送到文本文件,然后将第一个条目而不是最后一个条目发送到第二个文件。
sar -u 3 > measurements.txt & tail -1 measurements.txt > last_measurement.txt
答案 0 :(得分:1)
问题在于&
命令分隔符。它导致sar
命令在后台运行,同时在执行期间的某个不确定时间获取其输出文件的当前最后一行。您希望sar
完成,然后运行tail
。
sar -u 3 > measurements.txt ; tail -1 measurements.txt > last_measurement.txt
或更具惯用性
sar -u 3 > measurements.txt
tail -1 measurements.txt > last_measurement.txt
或tee
将所有内容保存在一个管道中
sar -u 3 | tee measurements.txt | tail -n 1 >last_measurement.txt