Condor提交任务提示找不到therm2_events二进制文件求解决
问题描述
本地直接运行./therm2_events可正常生成日志,但通过Condor提交任务执行runevents.sh脚本时,报错:
condor_exec.exe: line 90: ./therm2_events: No such file or directory
提交脚本内容:
executable = runevents.sh output = scheddfiles/output$(ProcId).out error = scheddfiles/error$(ProcId).err log = scheddfiles/log$(ProcId).log RequestCpus = 4 queue 1
runevents.sh脚本核心调用逻辑:
if ! ./therm2_events $TH2_EVENTS_INI_ $TH2_PPID_; then f_error_message 1 fi
可行解决方案
1. 确保依赖二进制文件被传输到执行节点
Condor默认仅传输提交脚本中指定的executable文件(此处为runevents.sh),不会自动同步依赖的二进制文件。需要在提交脚本中添加transfer_input_files参数,明确指定要传输的文件:
executable = runevents.sh output = scheddfiles/output$(ProcId).out error = scheddfiles/error$(ProcId).err log = scheddfiles/log$(ProcId).log RequestCpus = 4 # 添加上要传输的therm2_events文件,若不在当前目录需写完整路径 transfer_input_files = therm2_events queue 1
如果therm2_events存放在子目录(比如./bin/),则修改为transfer_input_files = ./bin/therm2_events。
2. 使用绝对路径调用二进制文件
若therm2_events已预先部署在所有Condor执行节点的固定路径下,直接在runevents.sh中替换相对路径为绝对路径即可:
# 替换原有的./therm2_events为实际绝对路径 if ! /opt/apps/therm2_events $TH2_EVENTS_INI_ $TH2_PPID_; then f_error_message 1 fi
此方案无需传输文件,前提是所有执行节点的该路径下都存在可执行的therm2_events。
3. 排查执行节点环境与文件权限
- 权限检查:如果是通过
transfer_input_files传输的文件,可能在执行节点上丢失可执行权限,可在runevents.sh调用前添加权限修复命令:chmod +x ./therm2_events if ! ./therm2_events $TH2_EVENTS_INI_ $TH2_PPID_; then f_error_message 1 fi - 架构兼容性检查:若执行节点与本地机器的CPU架构不同(比如本地是x86_64,执行节点是ARM),编译的二进制文件会无法识别,也会触发“找不到文件”的错误,需重新编译适配目标架构的版本。
内容的提问来源于stack exchange,提问作者Vikas Sumberia
相关产品推荐
相关产品推荐

