bash - 如何通过依赖于作业列表的 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 列表的数组。
现在,我有另一个我想提交的 SLURM 作业sbatch YY.sh
,但该作业需要等待提交,直到所有先前的作业完成。我怎样才能做到这一点?想到的命令是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
推荐阅读
- mysql - 如何在数据库中保存多个姓名的人并保持快速搜索?
- javascript - 如何修改字符串并在firestore中搜索?
- javascript - 强制单元格使用 javascript 填写谷歌表格
- reactjs - 托管 Web 应用程序 - 最佳实践
- firebase - 使用相同的 firebase 实时数据库创建多个不同的应用程序
- php - 将更多字符串 json 提取到 php
- macos - 无法连接到詹金斯码头集装箱MacOS内的码头工人
- python - 如何处理这个 dlib 轮编译错误
- css - 在 tumblr 中隐藏 SCM 播放器
- python-3.x - Python:使用 for 循环导入多个数据帧