在GitHub工作流后台运行mpstat失败:输出文件未生成且报找不到文件
GitHub Actions中后台运行mpstat无输出文件的问题分析与解决
核心问题
GitHub Actions的每个步骤(step)执行完成后,会自动终止该步骤启动的所有子进程。你在Collect Workflow Telemetry步骤中后台启动的mpstat,会在该步骤结束时被立即杀死,根本没有机会生成或写入输出文件,后续步骤自然找不到telemetry.out。
另外,使用相对路径可能因工作目录变化(尽管默认不会,但存在风险)导致文件查找失败,建议改用绝对路径。
解决方案
方案1:将mpstat与测试放在同一步骤执行
把mpstat启动、测试运行、mpstat终止放在同一个step里,确保mpstat在测试全程持续运行:
steps: - uses: actions/checkout@v3 - name: Run Test with Telemetry run: | # 启动mpstat后台进程,记录PID,使用绝对路径输出 mpstat -P ALL 5 > $GITHUB_WORKSPACE/telemetry.out 2> $GITHUB_WORKSPACE/telemetry.err < /dev/null & MPSTAT_PID=$! # 执行测试(若自定义action是脚本可直接运行,示例如下) ./.github/actions/test/run-test.sh # 测试完成后终止mpstat kill $MPSTAT_PID wait $MPSTAT_PID 2>/dev/null - name: Check Telemetry Output run: cat $GITHUB_WORKSPACE/telemetry.out
方案2:用nohup让mpstat脱离当前shell
如果必须保留独立的步骤结构,使用nohup让mpstat不受当前step结束的影响,测试完成后再终止它:
steps: - uses: actions/checkout@v3 - name: Install sysstat (若运行器未预装) run: sudo apt-get update && sudo apt-get install -y sysstat - name: Start Telemetry Collection run: | nohup mpstat -P ALL 5 > $GITHUB_WORKSPACE/telemetry.out 2> $GITHUB_WORKSPACE/telemetry.err < /dev/null & - uses: ./.github/actions/test - name: Stop Collection and View Telemetry run: | pkill mpstat cat $GITHUB_WORKSPACE/telemetry.out
额外注意事项
- 确认运行器已安装
sysstat包(mpstat属于该包),若未预装需添加安装步骤。 - 始终使用
$GITHUB_WORKSPACE作为输出文件的绝对路径前缀,避免路径歧义。
内容的提问来源于stack exchange,提问作者KatKibo
相关产品推荐
相关产品推荐

