You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让bash脚本等待sbatch作业完成后再执行后续流程

bash中等待sbatch作业完成的解决方案

方案1:直接使用sbatch内置--wait参数(最推荐)

这是最简单的实现方式,sbatch的--wait参数会让命令本身进入阻塞状态,直到提交的作业完全运行结束后才会返回,命令的退出码和作业的最终退出码保持一致。
你只需要修改你的提交命令即可:

export SOME_STUFF
#define paths
#run the model w/ 加上--wait参数
sbatch --wait ./job_card

# 作业运行结束后才会执行后续命令
mv your_output target_path

你还可以增加作业执行结果的判断,避免后续流程处理异常的输出:

if ! sbatch --wait ./job_card; then
    echo "模型作业运行失败,终止后续流程"
    exit 1
fi

方案2:捕获作业ID轮询状态(适配不支持--wait的场景)

部分旧版本的Slurm集群或者特殊配置下无法使用--wait参数,你可以先捕获提交作业的ID,通过循环查询作业状态实现等待:

export SOME_STUFF
#define paths
# --parsable参数会让sbatch仅输出作业ID,方便捕获
JOB_ID=$(sbatch --parsable ./job_card)

# 每隔30秒查询一次作业是否还在排队/运行中,作业结束后squeue查不到对应ID就退出循环
while squeue -j "${JOB_ID}" > /dev/null 2>&1; do
    sleep 30
done

# 后续依赖作业输出的命令
mv your_output target_path

如果需要判断作业最终是否运行成功,可以在循环结束后用sacct查询作业状态:

JOB_STATE=$(sacct -j "${JOB_ID}" --format=State --noheader | xargs)
if [ "${JOB_STATE}" != "COMPLETED" ]; then
    echo "作业运行异常,最终状态为${JOB_STATE}"
    exit 1
fi

内容的提问来源于stack exchange,提问作者aeolean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 02:54:00