如何解决如何通过依赖于作业列表的 sbatch 提交 SLURM 作业
我有一个向 SLURM 提交多个作业的 shell 脚本。这些作业在以下循环中提交:
nb_partitions=72
slurmids=() # storage of slurm job ids
for k in $(seq 1 $nb_partitions);
do
cd results/partition$k/MainFolder
ID=$(sbatch --parsable estimation.sh)
slurmids+=($ID)
cd ..
cd ..
cd ..
done
echo "Jobs are now running."
除了提交作业之外,此循环还会创建数组 slurmids
,其中包含所有 SLURM 作业的作业 ID 列表。
现在,我想用 sbatch YY.sh
提交另一个 SLURM 作业,但该作业需要等到 所有 之前的作业完成后才能提交。我怎样才能做到这一点?我想到的命令是 sbatch --dependency=afterok<jobID1:jobID2:...:jobID72> YY.sh
,我不确定如何在 slurmids
语句中使用我的 afterok
列表。
任何帮助将不胜感激!
解决方法
--dependency
语法是:
afterok:job_id[:jobid...]
所以你需要用冒号分隔数组。您可以简单地回显整个列表并在命令中用冒号替换空格:
sbatch --dependency=afterok:$(echo ${slurmids[*]} | tr ' ' :) YY.sh
如果您只需要将 slurmids 用于单一目的,您可以通过以下方式将它们连接到您的第一个脚本中:
[...]
slurmids=""
for k in $(seq 1 $nb_partitions);
do
cd results/partition$k/MainFolder
slurmids="$slurmids:$(sbatch --parsable estimation.sh)"
[...]
这将产生一个 $slurmids
字符串,其中所有 ID 以 :
和前导 :
分隔,因此您可以发送:
sbatch --dependency=afterok$slurmids YY.sh
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。