使用LSF的bsub提交任务时,如何将Job ID加入任务字符串?
LSF bsub命令中任务字符串的Job ID替换问题
问题核心是LSF对%J的替换逻辑在不同位置存在差异:
bsub的选项参数(比如-o)中的%J会被LSF直接替换为Job ID,所以你的日志文件名3456.log符合预期。- 但提交的任务命令(引号内的
mkdir job%J)中的%J,如果用双引号包裹,shell会直接将其作为普通字符传递,而LSF默认不会对任务命令里的%J做预替换——任务命令最终是送到执行节点的shell执行,此时%J对执行shell无特殊含义,因此创建了job%J目录。
解决方法
方法1:用单引号包裹任务命令
单引号会阻止shell解析内部内容,让LSF在分发任务到执行节点前将%J替换为Job ID:
bsub 'mkdir job%J' -o %J.log
方法2:双引号内转义%J
如果必须使用双引号,对%J添加反斜杠转义,确保shell将其原封不动传给LSF进行替换:
bsub "mkdir job\%J" -o %J.log
方法3:使用LSF环境变量LSB_JOBID
LSF在执行节点会自动设置LSB_JOBID环境变量(值为当前Job ID),可以直接在任务命令中引用:
bsub 'mkdir job$LSB_JOBID' -o %J.log
以上三种方法都能让任务创建出job3456(当Job ID为3456时)的目录,同时日志文件正常生成。
内容的提问来源于stack exchange,提问作者NullPointer
相关产品推荐
相关产品推荐

