我是一名癌症研究人员,我们想知道你们中是否有人知道如何编写一个调用其他SLURM的SLURM脚本。如果上一个脚本成功完成,则继续执行下一个调用。也就是说,类似于:
#!/bin/bash
#SBATCH --nodes=1
#SBATCH --tasks-per-node=1
#SBATCH --time=24:00:00
#SBATCH --mem=40GB?
#SBATCH --job-name=Master_script
#call first slurm
sbatch a.slurm
#if it completes successfully
if a.slurm:
sbatch b.slurm
if b.slurm:
sbatch c.slurm
sbatch d.slurm
if c.slurm:
sbatch e.slurm
else:
echo "c.slurm did not complete successfully"
else:
echo "b.slurm did not complete successfully"
else:
echo "a.slurm did not complete successfully"发布于 2018-12-07 16:54:45
您可以使用sbatch的--dependency选项提交这5个作业。
依赖关系,-d =将此作业的启动推迟到满足指定的依赖关系完成为止。
在你的例子中,它是这样的:
A=$(sbatch --parsable a.slurm)
B=$(sbatch --parsable --dependency=afterok:$A a.slurm)
C=$(sbatch --parsable --dependency=afterok:$B a.slurm)
D=$(sbatch --parsable --dependency=afterok:$B a.slurm)
E=$(sbatch --parsable --dependency=afterok:$D a.slurm) 请注意,在这种情况下,如果依赖作业失败,依赖于其他作业的作业将无限期地保持挂起状态。你要么手动清理它们,要么提交空作业,以防作业因--dependency=afternotok:...而失败。
如果您的工作流程变得更加复杂,那么研究Bosco或Fireworks等workflow managers的使用可能会很有趣。
https://stackoverflow.com/questions/53658169
复制相似问题