LSF集群bsub命令行提交任务异常,脚本文件提交正常求助
问题排查与解决
核心原因
你直接在bsub命令行后写的kallisto_stats=$(...) && echo ...,会被本地提交任务的shell提前解析执行,而非发送到LSF集群的计算节点上。具体表现为:
zcat N1_pear_merged.fastq.gz | awk ...实际在你当前终端机器上运行,不是集群计算节点- bsub仅在等待本地命令结束,所以集群任务显示RUN,但计算节点未启动任务,自然不会生成日志
- 若本地机器性能差或文件过大,该命令会长期卡在本地,导致集群任务一直处于RUN状态
修复方法
把要执行的命令整体用单引号包裹,让bsub将完整命令传递给计算节点执行,避免本地shell提前解析。修改后的命令如下:
bsub \ -R rusage[mem=8G] \ -R span[hosts=1] \ -n 1 \ -q short \ -W 2:00 \ -o log.N1.kallisto_calc.out \ -e log.N1.kallisto_calc.err \ -J kallisto_calc_test \ 'kallisto_stats=$(zcat N1_pear_merged.fastq.gz | awk '\''BEGIN {t=0.0; sq=0.0; n=0;}; NR%4==2 {n++; L=length($0); t+=L; sq+=L*L;} END {m=t/n; printf("total %d avg_length %f std_dev %f\n",n,m,sqrt(sq/n-m*m));}'\'' ) && echo -e N10'\''\t'\''$kallisto_stats >> kallisto_stats2.txt'
也可以用bash -c包裹,内部转义避免冲突,写法更清晰:
bsub \ -R rusage[mem=8G] \ -R span[hosts=1] \ -n 1 \ -q short \ -W 2:00 \ -o log.N1.kallisto_calc.out \ -e log.N1.kallisto_calc.err \ -J kallisto_calc_test \ bash -c "kallisto_stats=\$(zcat N1_pear_merged.fastq.gz | awk 'BEGIN {t=0.0; sq=0.0; n=0;}; NR%4==2 {n++; L=length(\$0); t+=L; sq+=L*L;} END {m=t/n; printf(\"total %d avg_length %f std_dev %f\n\",n,m,sqrt(sq/n-m*m));}') && echo -e N10'\t'\$kallisto_stats >> kallisto_stats2.txt"
验证要点
- 修复后任务会在集群计算节点启动,日志文件将正常生成
- 确保
N1_pear_merged.fastq.gz存储在计算节点可访问的共享路径下
内容的提问来源于stack exchange,提问作者appletree7
相关产品推荐
相关产品推荐

