【发布时间】:2020-05-12 17:49:32
【问题描述】:
我有一个从根 crontab 运行的脚本:
05 * * * * /bin/bash /root/systat_kpi_tools/systat_kpi.sh
该脚本有一个mpstat 输出格式并以CSV 格式保存在一个文件中:
[[ -e ${BASE_DIR}/cpu_stat_${NOW}.csv ]] || echo "Year,Month,Day,Hr,Min,Sec,%user,%nice,%sys,%iowait,%irq,%soft,%steal,%idle,intr/s" >> ${BASE_DIR}/cpu_stat_${NOW}.csv
mpstat | awk 'NR>3{ print substr($0, index($0,$4)) }' | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1; print}' >> ${BASE_DIR}/cpu_stat_${NOW}.csv
文件的输出:
# cat cpu_stat_160526.csv
Year,Month,Day,Hr,Min,Sec,%user,%nice,%sys,%iowait,%irq,%soft,%steal,%idle,intr/s
2016,05,26,14,05,01,0.00,2.17,0.08,0.01,0.14,0.00,90.29,1093.83
2016,05,26,15,05,02,0.00,2.19,0.08,0.01,0.14,0.00,90.25,1093.82
当我从脚本中运行命令时:
# echo "Year,Month,Day,Hr,Min,Sec,%user,%nice,%sys,%iowait,%irq,%soft,%steal,%idle,intr/s" > tmp
# mpstat | awk 'NR>3{ print substr($0, index($0,$4)) }' | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1; print}' >> tmp
# mpstat | awk 'NR>3{ print substr($0, index($0,$4)) }' | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1; print}' >> tmp
# mpstat | awk 'NR>3{ print substr($0, index($0,$4)) }' | awk -v dt=$(date +'%Y,%m,%d,%H,%M,%S') -v OFS=, '{$1=dt OFS $1; print}' >> tmp
我得到这个输出:
# cat tmp
Year,Month,Day,Hr,Min,Sec,%user,%nice,%sys,%iowait,%irq,%soft,%steal,%idle,intr/s
2016,05,26,15,04,54,7.33,0.00,2.19,0.08,0.01,0.14,0.00,90.25,1093.82
2016,05,26,15,04,57,7.33,0.00,2.19,0.08,0.01,0.14,0.00,90.25,1093.82
2016,05,26,15,04,58,7.33,0.00,2.19,0.08,0.01,0.14,0.00,90.25,1093.82
注意列%user 的值为7.33,7.33,7.33,当从脚本执行同一行时,该列会从先前的输出中丢失。为什么会有这种奇怪的行为?
我的 Linux 风格是 RHEL5.10 64 bits :
kernel-2.6.18-371.el5
【问题讨论】:
-
在脚本中采购
.bash_profile就可以了。现在丢失的文件出现了。不确定为什么会有这种行为?保持问题仍然开放以进行一些解释。 -
mpstat 表示要报告自系统启动(引导)以来的处理器统计信息。这就是为什么你总是得到 7.3。在终端上运行,间隔像这样 mpstat 1 然后你会得到不同的值。