qsub作业依赖疑问:无错误定义及多作业0退出码依赖实现
关于qsub作业依赖的两个问题解答
问题1:qsub文档中的「无错误」具体指什么?
在PBS/Torque调度系统里,-W depend=afterok提到的「无错误终止」只以作业的退出状态码(exit code)是否为0作为判定依据,和作业是否向stderr输出内容完全无关。
简单来说:
- 只要你的脚本最终以
exit 0(或者正常结束、没有返回非0退出码)终止,哪怕stderr里有日志、警告甚至非致命提示,调度器都会认定这个作业是「无错误完成」的。 - 只有当作业退出状态码不为0时,才会被判定为错误终止,不会触发
afterok依赖的后续作业。
问题2:如何让一个作业明确依赖于一组作业全部以退出状态码0终止?
你可以直接在afterok后用逗号分隔所有前置作业的Job ID,调度器会自动校验所有指定作业是否都以退出码0完成,只有全部满足条件时,最终作业才会被调度执行。
具体操作示例:
- 先提交所有前置作业,记录每个作业的Job ID:
# 提交单个前置作业,将Job ID保存到变量 job_1=$(qsub task_1.sh) job_2=$(qsub task_2.sh) job_3=$(qsub task_3.sh)
- 提交最终作业,指定依赖所有前置作业:
qsub -W depend=afterok:$job_1,$job_2,$job_3 final_task.sh
额外说明:
- 如果任意一个前置作业退出状态码不为0,最终作业会被标记为「依赖失败」,不会被调度。
- 若是提交数组作业,部分PBS版本支持
afterokarray语法,可直接依赖整个数组作业的所有任务成功完成,比如-W depend=afterokarray:5678[](其中5678是数组作业的主Job ID)。
内容的提问来源于stack exchange,提问作者Jim Newton
相关产品推荐
相关产品推荐

