Snakemake Slurm输出文件重定向到新目录

问题描述 投票:0回答:1

我正在整理一个snakemake的slurm工作流程,并遇到我的工作目录变得混乱不堪的问题。我希望我的工作流程至少将这些文件定向到工作目录内的“ slurm”目录。我目前的工作流程如下:

config.yaml:

reads:
    1:
    2:
samples:
    15FL1-2: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS/data/15FL1-2
    15Fl1-4: /datasets/work/AF_CROWN_RUST_WORK/2020-02-28_GWAS/data/15Fl1-4

cluster.yaml:

localrules: all

__default__:
    time: 0:5:0
    mem: 1G
    output: _{rule}_{wildcards.sample}_%A.slurm

fastqc_raw:
    job_name: sm_fastqc_raw
    time: 0:10:0
    mem: 1G
    output: slurm/_{rule}_{wildcards.sample}_{wildcards.read}_%A.slurm

Snakefile:

configfile: "config.yaml"
workdir: config["work"]

rule all:
    input:
        expand("analysis/fastqc_raw/{sample}_R{read}_fastqc.html", sample=config["samples"],read=config["reads"])

rule clean:
    shell:
        "rm -rf analysis logs"

rule fastqc_raw:
    input:
        'data/{sample}_R{read}.fastq.gz'
    output:
        'analysis/fastqc_raw/{sample}_R{read}_fastqc.html'
    log:
        err = 'logs/fastqc_raw/{sample}_R{read}.out',
        out = 'logs/fastqc_raw/{sample}_R{read}.err'
    shell:
        """
        fastqc {input} --noextract --outdir 'analysis/fastqc_raw' 2> {log.err} > {log.out}
        """

然后我打电话给:

snakemake --jobs 4  --cluster-config cluster.yaml --cluster "sbatch --mem={cluster.mem} --time={cluster.time} --job-name={cluster.job_name} --output={cluster.output}"

这不起作用,因为slurm目录尚不存在。我不想在运行snakemake命令之前手动进行此操作,这对于可伸缩性不起作用。阅读每个相关问题后,我尝试过的事情是:

1)只是试图通过规则中的日志捕获所有输出,然后设置cluster.output='/dev/null'。不起作用,由于没有准确输出规则,因此没有捕获到Slurm输出中的信息,有关其工作的信息

2)通过添加虚拟日志来强制创建目录:

    log:
        err = 'logs/fastqc_raw/{sample}_R{read}.out',
        out = 'logs/fastqc_raw/{sample}_R{read}.err'
        jobOut = 'slurm/out.err'

我认为这不起作用,因为sbatch尝试在实施规则之前找到slurm文件夹

3)允许在工作目录中创建文件,并在规则的末尾添加bash代码以将文件移动到Slurm目录中。我相信这是行不通的,因为它会在作业完成写入slurm输出之前尝试移动文件。

还有其他想法或招数吗?

slurm snakemake sbatch
1个回答
0
投票

您应该能够通过用sbatch调用--output=/dev/null --error=/dev/null来抑制这些输出。像这样的东西:

snakemake ... --cluster "sbatch --output=/dev/null --error=/dev/null ..."

如果您希望文件进入您选择的目录,您当然可以更改调用以反映出来:

snakemake ... --cluster "sbatch --output=/home/Ensa/slurmout/%j.out --error=/home/Ensa/slurmout/%j.out ..."
© www.soinside.com 2019 - 2024. All rights reserved.