bash - 仅在我之前的所有工作完成后才运行工作

标签 bash lsf

我发现了一篇文章,说明如何告诉 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/

相关文章:

python - os.system 用于提交命令

arrays - 如何使用包含数组名称的第二个变量来引用现有的 bash 数组?

macos - 在命令行中编辑 ipa plist 文件

bash - crontab 中 LSF 排队输出问题

lsf - 我可以在不发送邮件的情况下隐藏 LSF 作业报告吗?

docker - 作业完成后自动关闭 AWS 实例

bash - Hashicorp 使用 Azure 保管库自动解封

linux - WGET 后运行 bash 脚本会忽略读取用户输入

bash -/.profile与/.bashrc在ubuntu14.04上的hadoop变量

cluster-computing - 为什么在 Slurm 中重复调用 squeue 不受欢迎?