Slurm依赖运行中作业失效:为何依赖被忽略及解决方法
Slurm作业依赖被忽略的原因及解决办法
依赖被忽略的原因
Slurm中after:<jobid>依赖类型的逻辑是:仅当目标作业处于**Pending(待调度)状态时,才会生效等待约束。如果目标作业已经处于Running(运行中)**状态,Slurm会判定该依赖条件已"满足"(运行中的作业最终会结束),因此自动清除这个依赖约束,导致你查看作业时显示Dependency=(null)。
这也是为什么依赖非运行状态(Pending或Completed)的作业时没有问题——此时Slurm能明确判断等待的触发条件。
实现预期效果的方法
要让新作业在运行中的作业彻底结束后才启动,你需要使用afterany:<jobid>依赖类型。它的作用是等待指定作业完成(无论作业最终是成功还是失败),即使目标作业当前处于运行状态,这个依赖也会被保留,直到目标作业结束。
提交新作业时直接设置依赖:
sbatch -d afterany:12345 job.script
给已提交的作业(如你的12346)修改依赖:
scontrol update JobId=12346 dependency=afterany:12345
执行上述操作后,再用scontrol show job 12346查看,就能看到依赖已正确设置,作业会等待12345结束后再启动。
补充说明:如果只希望在目标作业成功结束后启动新作业,可使用afterok:<jobid>;若只希望目标作业失败时启动新作业,使用afternotok:<jobid>,根据需求选择即可。
内容的提问来源于stack exchange,提问作者stardt
相关产品推荐
相关产品推荐

