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

Snakemake使用--force重运行步骤后,依赖步骤未触发重运行问题

Snakemake重跑上游规则后下游未自动触发的解决方法

问题场景

在两步工作流中,完整运行后用--force重跑上游规则(realoutput),再次执行完整工作流时,下游规则(runall)未自动触发——即使上游输出文件的修改时间(mtime)晚于下游文件,添加--rerun-triggers=mtime参数也无法解决。

最小复现示例

Snakefile(bad.snakefile)

rule runall:
    input: "bye.txt"
    output: "hello.txt"
    shell: "echo hello > {output}"

rule realoutput:
    output: "bye.txt"
    shell: "echo bye > {output}"

操作步骤

  1. 首次执行完整工作流:
    snakemake --snakefile bad.snakefile --cores 1
    
    两个规则均成功运行。
  2. 用--force重跑上游规则:
    snakemake --snakefile bad.snakefile --cores 1 --force realoutput
    
    操作完成,bye.txt的mtime已更新。
  3. 再次执行完整工作流,系统提示所有任务已完成,但runall本应因上游文件更新而重跑。执行--summary可见时间戳符合预期,但未触发更新:
    snakemake --snakefile bad.snakefile --cores 1 --summary
    
    输出:
    Building DAG of jobs...
    output_file date    rule    log-file(s) status  plan
    hello.txt   Thu Sep 19 11:25:20 2024    runall      ok  no update
    bye.txt Thu Sep 19 11:30:04 2024    realoutput      ok  no update
    

问题原因

--force参数仅强制重新生成目标文件,但不会更新Snakemake内部的规则执行状态记录。Snakemake默认的依赖检查逻辑会结合文件mtime和自身的执行日志(存储在.snakemake/目录),即使文件mtime更新,只要内部记录中上游规则的完成状态未标记为“已更新”,下游规则就不会触发重跑。--rerun-triggers=mtime仅改变触发重跑的条件,但无法覆盖Snakemake对规则执行状态的判断。

解决方法

方法1:改用--forcerun重跑上游规则

重跑上游规则时,使用--forcerun替代--force,该参数会强制执行规则并更新Snakemake的内部执行记录:

snakemake --snakefile bad.snakefile --cores 1 --forcerun realoutput

之后再次执行完整工作流,Snakemake会检测到上游规则已重新执行,自动触发下游的runall规则。

方法2:在规则中指定rerun_triggers为mtime

修改Snakefile,为下游规则添加rerun_triggers: mtime,让Snakemake仅根据输入文件的mtime判断是否重跑:

rule runall:
    input: "bye.txt"
    output: "hello.txt"
    rerun_triggers: mtime
    shell: "echo hello > {output}"

rule realoutput:
    output: "bye.txt"
    shell: "echo bye > {output}"

修改后,无论用--force还是其他方式更新bye.txt的mtime,再次执行完整工作流时runall都会自动触发。

方法3:手动触发下游规则(应急方案)

如果仅需单次触发下游规则,可直接指定重跑下游规则,无需强制全量执行:

snakemake --snakefile bad.snakefile --cores 1 --forcerun runall

内容的提问来源于stack exchange,提问作者Fonnae

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:46:23