能否在IBM LSF作业名称依赖配置中使用正则表达式?
IBM LSF作业依赖:能否用
Job-*匹配前缀为Job-的作业? 直接给结论:你用的写法有小问题,但调整后是可以实现的,不过要注意LSF的匹配规则和shell解析的坑。
先解释核心问题:
- LSF的
-w(依赖条件)里的作业名称匹配用的是shell风格通配符,不是标准正则表达式。你写的Job-*本身是符合通配符规则的(匹配所有以Job-开头的作业),但你的命令里用了双引号"done(Job-*)",这会导致shell先解析*,把它替换成当前目录下所有以Job-开头的文件(如果有的话),这就完全偏离了你要匹配作业名称的初衷。
正确的命令写法
你需要用单引号把整个依赖条件括起来,避免shell解析通配符:
bsub -J 'A' -w 'done(Job-*)'
这样LSF会直接把Job-*当作作业名称的通配符,匹配所有已提交的、名称以Job-开头的作业,只有当这些作业全部进入DONE状态后,作业A才会启动。
更可靠的替代方案(尤其适合大量作业)
如果你的LSF版本比较旧,或者担心通配符匹配出现意外,推荐用**作业组(Job Group)**的方式:
- 提交所有
Job-*作业时,指定同一个作业组:bsub -g /job_prefix_group -J 'Job-1' ... bsub -g /job_prefix_group -J 'Job-2' ... # 以此类推到Job-100 - 提交作业A时,依赖整个作业组的完成:
bsub -J 'A' -w 'done(/job_prefix_group)'
这种方式更清晰,也不会受shell通配符解析的影响,而且能明确确保所有属于该组的作业完成后才启动作业A。
额外注意事项
- 确保所有
Job-*的作业在提交作业A之前已经被提交到LSF系统中。如果作业A提交时还没有任何匹配Job-*的作业,LSF会认为依赖条件已经满足,作业A会立刻开始运行,这显然不是你想要的结果。 - 如果你需要排除某些以
Job-开头的作业,通配符就不太好用了,这时候作业组的优势更明显——你可以精准控制哪些作业属于依赖组。
内容的提问来源于stack exchange,提问作者Vishal
相关产品推荐
相关产品推荐

