You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Nextflow运行vcftools仅生成.weir.fst文件无.log文件问题求助

问题原因与解决方案

1. 输出文件glob匹配规则错误

你当前process的output定义为path "*.log.*",这个匹配规则要求文件名必须包含.log.(即.log后面紧跟一个点和其他字符):

  • 匹配:xxx.log.weir.fst(符合规则,所以能正常捕获)
  • 不匹配:xxx.log(纯日志文件,.log后面没有其他字符,完全无法被规则命中)

Nextflow只会收集匹配输出规则的文件,未匹配的文件默认不会被发布到publishDir,部分场景下任务完成后也不会在工作目录保留。

2. Nextflow默认严格错误检查导致脚本提前终止

Nextflow默认会在所有任务脚本开头注入set -e配置,只要脚本中任意命令返回非0退出码,整个脚本就会立即终止。而你手动执行bash .command.sh时,默认没有开启该配置,哪怕某一步vcftools运行返回非0(比如出现警告、部分位点被过滤的场景),也会跑完所有步骤,生成全部文件。

3. 重名覆盖风险

如果你的mart输入文件有多行,且不同行的$inicio值相同,后续运行的vcftools会直接覆盖之前生成的.log文件,最终只会保留最后一行对应的日志文件。


修复方案
  1. 修改output规则,同时匹配两类输出文件:
output:
path "*.log"
path "*.log.weir.fst"

也可以用单规则匹配两种格式:

output:
path "*.log{,.weir.fst}"
  1. 如果确认vcftools的非0退出码不影响最终结果,可以在脚本开头关闭严格错误检查:
"""
set +e
while read linea
        do
            echo "[DEBUG] working in line: \$linea"
            inicio=\$(echo "\$linea" | cut -f3)
            final=\$(echo "\$linea" | cut -f4)
            cromosoma=\$(echo "\$linea" | cut -f1)
            segmento=\$(echo "\$linea" | cut -f5)
            vcftools --vcf ${vcf} \
                 --weir-fst-pop ${pop_1} \
                 --weir-fst-pop ${pop_2} \
                 --out \$inicio.log --chr \$cromosoma \
                 --from-bp \$inicio --to-bp \$final
        done < ${mart}
"""
  1. 避免重名覆盖,给输出前缀加唯一标识,比如用$inicio_$cromosoma_$segmento作为输出前缀:
vcftools --vcf ${vcf} \
     --weir-fst-pop ${pop_1} \
     --weir-fst-pop ${pop_2} \
     --out \${inicio}_\${cromosoma}_\${segmento}.log --chr \$cromosoma \
     --from-bp \$inicio --to-bp \$final

如果修改后还是无法生成.log文件,可以在vcftools命令末尾添加2>> \${inicio}.log,强制把标准错误输出写入日志文件,避免日志被Nextflow捕获到任务的.stdout/.stderr文件中。

内容的提问来源于stack exchange,提问作者fernanda-miron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:36:02