Condor新手求助:提交.sub文件后任务进入HOLD状态排查
分析你的Condor提交脚本问题
刚接触Condor遇到这种问题很正常,你的.sub文件里有几个典型的新手误区,我帮你逐一拆解清楚:
1. Executable参数指定错误
你写的executable = Train.cxx是C++源代码文件,但Condor的executable要求必须是编译完成的可执行二进制文件(比如Linux下编译后生成的Train或者Train.out)。Condor不会帮你编译代码,你得先在本地把Train.cxx编译成可执行程序,再把这个二进制文件作为executable的值。
2. Transfer_input_files的冗余设置
你传输的TMVA/Factory.h等头文件是编译阶段的依赖,不是程序运行时需要的文件。当你已经编译好可执行程序后,运行时完全不需要这些头文件,所以这部分可以直接删掉,没必要徒增文件传输的负担。
3. Output参数的用途混淆
output = TMVA-top.root是错误的用法!Condor里的output参数是用来捕获程序运行时的标准输出(stdout)日志(比如程序打印的调试信息、运行状态),不是用来指定你的程序生成的ROOT文件。你应该把它改成类似output = Train_run.log的日志文件名,而TMVA-top.root会由你的程序本身生成,之后通过transfer_output_files指定传输回本地。
4. Transfer_output_files的注意事项
你指定了transfer_output_files = Likelihood_Classification/,要注意两个关键点:
- 确保你的程序确实在任务运行的当前工作目录下生成了这个目录,Condor只会传输任务执行目录下的文件/目录;
- Condor传输目录时要求目录必须存在,否则会直接触发任务HOLD,所以要保证程序能正确生成这个目录。
修正后的示例.sub文件
executable = Train # 替换成你编译好的可执行文件名 output = Train.stdout error = Train.stderr log = Train.log # 如果程序运行时需要其他依赖库/数据文件,再在这里添加transfer_input_files transfer_output_files = TMVA-top.root, Likelihood_Classification/ queue
另外,你可以用condor_q -hold <你的任务ID>命令查看具体的HOLD原因,这能帮你更精准地定位问题哦!
内容的提问来源于stack exchange,提问作者Bianca
相关产品推荐
相关产品推荐

