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

如何用单脚本按序运行多个Snakemake流水线?

顺序运行多个Snakemake流水线的实现方案

方法一:使用Shell脚本(最直接的实现)

编写可执行的bash脚本,按顺序调用各个流水线,并添加错误检查,确保前一个流程成功后才执行下一个:

创建脚本文件run_pipelines.sh,内容如下:

#!/bin/bash

# 运行第一个流水线,指定15个并行任务
snakemake -s Snakefile_pipeline_1 -j 15
# 检查上一步执行状态,失败则终止
if [ $? -ne 0 ]; then
    echo "Pipeline 1 failed, exiting."
    exit 1
fi

# 运行第二个流水线,指定40个并行任务
snakemake -s Snakefile_pipeline_2 -j 40
if [ $? -ne 0 ]; then
    echo "Pipeline 2 failed, exiting."
    exit 1
fi

# 在指定conda环境中运行第三个流水线
# 推荐用conda run避免激活环境的交互问题
conda run -n some_env snakemake -s Snakefile_pipeline_3 -j 10
# 若conda run不兼容,可改用source方式(仅适用于bash):
# source $(conda info --base)/etc/profile.d/conda.sh
# conda activate some_env
# snakemake -s Snakefile_pipeline_3 -j 10
# conda deactivate

给脚本添加执行权限:

chmod +x run_pipelines.sh

执行脚本即可按顺序启动所有流水线:

./run_pipelines.sh

方法二:通过主Snakefile统一管理

如果希望用Snakemake的原生方式管理流程顺序,可以创建一个主Snakefile,通过虚拟目标文件控制执行顺序:

创建主文件Snakefile_main:

rule all:
    input:
        # 虚拟目标文件,确保所有子流程都执行完成
        ".pipeline_1_complete",
        ".pipeline_2_complete",
        ".pipeline_3_complete"

rule run_pipeline_1:
    output:
        touch(".pipeline_1_complete")
    shell:
        "snakemake -s Snakefile_pipeline_1 -j 15"

rule run_pipeline_2:
    input:
        ".pipeline_1_complete"
    output:
        touch(".pipeline_2_complete")
    shell:
        "snakemake -s Snakefile_pipeline_2 -j 40"

rule run_pipeline_3:
    input:
        ".pipeline_2_complete"
    output:
        touch(".pipeline_3_complete")
    shell:
        # 在指定conda环境中执行第三个流水线
        "conda run -n some_env snakemake -s Snakefile_pipeline_3 -j 10"

运行主流水线时指定单线程,确保顺序执行:

snakemake -s Snakefile_main -j 1

两种方案对比

  • Shell脚本:无需修改现有Snakefile,实现快速,适合临时或简单的流程串联;可灵活添加日志、错误提示等自定义逻辑。
  • 主Snakefile方式:更贴合Snakemake的工作流管理逻辑,便于后续扩展更多子流程,适合长期维护的项目。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24