能否在HTCondor提交脚本中混合嵌入Bash脚本逻辑?
结论
你贴的混合写法不能直接实现需求。HTCondor的condor_submit提交解析器原生不识别Bash shell的循环语法,直接把这段代码存为提交文件运行会直接报语法错误,同时你原代码里的参数赋值写法也存在格式问题。
可直接使用的实现方案
方案1:纯HTCondor提交脚本(推荐,最简洁)
HTCondor的Queue指令原生支持读取shell命令的输出作为变量批量提交作业,不需要额外嵌套Bash脚本,直接写标准的.sub提交文件即可:
# 替换成你的可执行文件实际路径 executable = /path/to/your/executable # 按参数值区分每个作业的日志、输出、错误文件,避免文件覆盖 output = logs/job_$(fp).out error = logs/job_$(fp).err log = logs/job_$(fp).log # 注意赋值格式:等号两边可留空格,不要在参数前加无意义空格 arguments = $(fp) # 直接调用seq生成序列,逐行读取值作为fp变量提交作业 Queue fp from seq 1.0 0.01 1.1 |
写好后直接执行condor_submit 你的文件名.sub即可完成批量提交。
方案2:Bash动态生成提交描述(适合需要加复杂Bash逻辑的场景)
如果你需要在参数生成环节加入更复杂的Bash判断、计算逻辑,可以写Bash脚本动态拼接提交描述,通过管道传给condor_submit(参数-表示从标准输入读取提交配置):
#!/bin/bash # 提前建好日志目录避免报错 mkdir -p logs for fp in $(seq 1.0 .01 1.1) do cat <<JOBEOF executable = /path/to/your/executable output = logs/job_${fp}.out error = logs/job_${fp}.err log = logs/job_${fp}.log arguments = ${fp} queue JOBEOF done | condor_submit -
给脚本加执行权限后直接运行这个Bash脚本即可完成提交。
原写法的问题说明
- 把Bash的
for循环直接写在.submit文件中时,condor_submit会把for识别为非法的提交配置指令,直接抛出解析错误 - 原代码中
Arguments= $fp的写法有误:HTCondor配置赋值时,等号后如果直接接空格再跟变量,会导致传入的参数前带多余空格,甚至出现解析失败的问题 - 原写法没有把循环生成的配置传给
condor_submit的执行入口,写在提交文件里的Bash循环逻辑根本不会被Bash执行
内容的提问来源于stack exchange,提问作者Physics Student
相关产品推荐
相关产品推荐

