使用Slurm作业ID

39

当我在集群上启动计算时,通常有一个单独的程序在最后进行后处理:

sbatch simulation
sbatch --dependency=afterok:JOBIDHERE postprocessing

我想避免打错字,并自动插入正确的工作 ID。有什么好的想法吗?谢谢。

1个回答

55

你可以这样做:

RES=$(sbatch simulation) && sbatch --dependency=afterok:${RES##* } postprocessing

RES变量将保存sbatch命令的结果,类似于Submitted batch job 102045。构造${RES##* }会分离出最后一个单词(详见此处),在当前情况下是作业ID。&&部分确保在第一次提交失败时不会尝试提交第二个作业。


35
请注意,在最近版本的 Slurm 中,sbatch 命令有一个 --parsable 参数,只返回作业 ID,因此可以简化为 RES=$(sbatch --parsable simulation) - damienfrancois
3
注意,在联邦集群上,sbatch 除了作业 ID 外还会提供集群名称。 - damienfrancois
2
注意,使用 --parsable 标志可能会得到一个逗号分隔的列表。从 sbatch 的 man 页面中:--parsable 仅输出作业 ID 号和集群名称(如果存在)。这些值由分号分隔。错误仍将被显示。 - Stefan
1
另一种方法是在您的脚本中包含类似于echo $SLURM_JOB_ID的内容,这将回显导出的环境变量。 - Roman Gherta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接