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

Snakemake搭建AMRFinder数据库更新查询流程无检查点文件实现问询

可行实现方案

完全可以不用额外的update_finished.txt检查点文件,以下是两种常用的实现方式:


方案1:直接跟踪AMRFinder实际数据库目录(最推荐)

你可以显式指定AMRFinder的数据库存储路径,将数据库目录直接作为更新规则的输出,不需要额外生成空标记文件,逻辑更直观,也能真实反映数据库文件的状态:

# 统一定义数据库存储路径,方便后续修改
AMRFINDER_DB = "amrfinder_db"

rule update_amrfinder:
    output:
        # 直接输出数据库目录,无需单独的检查点文件
        directory(AMRFINDER_DB)
    conda:
        "../envs/amrfinder.yaml"
    shell:
        """
        # 显式指定数据库下载路径,更新到对应目录
        amrfinder -u --database_dir {output}
        """

rule amrfinder_query:
    input:
        fasta="{sample}.fasta",
        # 直接依赖数据库目录即可
        db=AMRFINDER_DB
    output:
        "{sample}_amrfinder.tsv"
    conda:
        "../envs/amrfinder.yaml"
    shell:
        """
        # 查询时指定同一个数据库目录
        amrfinder -n {input.fasta} --database_dir {input.db} 1> {output}
        """

该方案优势是如果数据库目录被意外删除或修改,Snakemake会自动触发重新更新,可靠性远高于自定义的txt检查点。


方案2:用临时标记文件自动清理(无残留文件)

如果你不想在工作目录保留任何额外的标记文件,也不想显式管理数据库路径,可以将更新规则的输出设置为临时标记,Snakemake执行完后会自动清理该文件,不会留下冗余文件:

rule update_amrfinder:
    output:
        # 标记为临时文件,执行完后自动删除
        temp("amrfinder_updated")
    conda:
        "../envs/amrfinder.yaml"
    shell:
        """
        amrfinder -u
        # 生成临时标记用于任务状态校验
        touch {output}
        """

rule amrfinder_query:
    input:
        fasta="{sample}.fasta",
        db="amrfinder_updated"
    output:
        "{sample}_amrfinder.tsv"
    conda:
        "../envs/amrfinder.yaml"
    shell:
        "amrfinder -n {input.fasta} 1> {output}"

该方案适合不需要复用数据库、每次运行都要更新的场景,缺点是无法感知数据库本身的损坏,只要临时标记曾经生成过,就不会重新执行更新操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:15:01