树莓派环境下如何延迟执行第二个命令且不中断首个命令?
优化你的树莓派基准测试脚本
看起来你想在sysbench预热5秒后启动系统监控,同时确保监控和测试周期对齐——这个需求很合理,但现有脚本存在几个容易踩的坑,我帮你调整下:
现有脚本的问题
iostat和mpstat默认会持续输出直到手动终止,不会自动跟着sysbench结束,会导致后续测试轮次的监控数据混乱。- 后台进程没有同步:sysbench结束后监控还会继续跑,或者监控还没采集完sysbench就结束了,时间线不匹配。
- 所有测试结果直接追加到同一个文件,后续很难区分不同
max-prime对应的监控数据。
优化后的脚本
#!/bin/bash # 创建专属目录存放结果,避免文件混乱 OUTPUT_DIR="raspberrypi_benchmarks" mkdir -p "$OUTPUT_DIR" for x in 16000 32000 64000 128000 do echo "=== Starting benchmark with max-prime = $x ===" # 为每个测试生成独立的输出文件,方便后续分析 SYSBENCH_LOG="${OUTPUT_DIR}/sysbench_cpu_${x}.log" MPSTAT_LOG="${OUTPUT_DIR}/mpstat_${x}.log" IOSTAT_LOG="${OUTPUT_DIR}/iostat_${x}.log" # 启动sysbench并记录进程ID,方便后续监控生命周期 sysbench --test=cpu --cpu-max-prime=$x --num-threads=4 run >> "$SYSBENCH_LOG" & SYSBENCH_PID=$! # 等待5秒预热时间 sleep 5s # 启动mpstat,每秒采集一次CPU统计,直到sysbench结束 mpstat 1 >> "$MPSTAT_LOG" & MPSTAT_PID=$! # 启动iostat,每秒采集一次磁盘统计(-x 可输出扩展信息,按需开启) # iostat -x 1 >> "$IOSTAT_LOG" & iostat 1 >> "$IOSTAT_LOG" & IOSTAT_PID=$! # 等待sysbench测试完成 wait $SYSBENCH_PID # 测试结束后终止监控进程,避免资源浪费 kill $MPSTAT_PID $IOSTAT_PID # 忽略监控进程退出的报错(kill后进程已结束,wait会返回非0状态) wait $MPSTAT_PID $IOSTAT_PID 2>/dev/null echo "=== Benchmark with max-prime = $x completed ===" done echo "All benchmarks finished! Check results in: ${OUTPUT_DIR}/"
关键调整说明
- 独立输出文件:每个测试的sysbench、mpstat、iostat结果都存在单独文件里,用
max-prime值命名,后续分析数据不用再手动拆分。 - 进程生命周期绑定:通过记录sysbench的PID,确保监控工具只在sysbench运行期间采集数据,测试结束后自动停止。
- 定时采集:给
mpstat和iostat加上1参数,每秒采集一次数据,相比默认的单次输出,能得到更细致的系统负载变化曲线。 - 兼容小提示:如果你的sysbench是较新版本,
--test=cpu可能已被简化为cpu,可以改成sysbench cpu --cpu-max-prime=$x --num-threads=4 run。
内容的提问来源于stack exchange,提问作者CH123
相关产品推荐
相关产品推荐

