我发现了一篇文章,说明如何告诉 bsub 在运行之前等待一组指定的作业完成 here ,但这只有在事先知道作业数量的情况下才有效。
我想运行任意数量的作业,并在所有作业完成后运行“总结”作业
这是我的脚本:
#!/bin/bash
for file in dir/*; do # I don't know how many jobs will be created
bsub "./do_it_once.sh $file"
done
bsub -w "done(1) && done(2) && done(3)" merge_results.sh
上面的脚本在提交 3 个作业时有效,但是如果有 n 个作业怎么办?我如何指定我要等待所有作业完成?
最佳答案
编辑请参阅 kamula's answer真正有效的方法:) .
原始答案
从未使用过bsub
,但快速浏览过the man page ,我认为这可能会做到这一点:
#!/bin/bash
jobnum=0
for file in src/*; do # I don't know how many jobs will be created
bsub -J "myjobs[$jobnum]" "./do_it_once.sh $file"
jobnum=$((jobnum + 1))
done
bsub -w "done(myjobs[*])" merge_results.sh
作业通过名为 myjobs[]
的 bsub
数组中的顺序索引进行命名,使用 bash
变量 jobnum
。然后最后一个 bsub
等待所有 myjobs[]
作业完成。
YMMV!
哦 - 另外,您可能需要使用 -J "\"myjobs[...]\""
(使用 \"
)。手册页显示将作业名称用双引号引起来,但我不知道这是否是 bsub
要求,或者他们是否假设您将使用扩展未加引号的文本的 shell。
关于bash - 仅在我之前的所有工作完成后才运行工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39230277/