我正在粗鲁的HPC上运行snakemake管道。有时,作业将由于超出墙壁时间或内存而失败。此类失败的作业不会创建日志文件,或者它们的日志文件会作为snakemakes自动删除与失败的作业关联的文件的一部分而被删除。获取失败作业的日志记录信息会很方便,这样我就可以更轻松地了解为什么作业失败。
我目前为每个作业设置了日志参数,然后cluster.json文件专门为每个作业调用这些日志。通常的规则是cluster.json调用和我的snakemake调用如下所示。
rule fastqScreen:
input:
Fast1="{sample}/{sample}.R1.fq.gz",
Fast2="{sample}/{sample}.R2.fq.gz"
output:
output1="{sample}/{sample}.fq.gz",
output2="{sample}/{sample}_screen.png",
output3="{sample}/{sample}_screen.txt"
log: "logs/{sample}FastScreen.log"
params:
outprefix = "{sample}"
threads: 4
priority: 3
shell:
"""
cat {input.Fast1} {input.Fast2} > {output.output1} && /home/manninm/Programs/fastq_screen_v0.14.0/fastq_screen --aligner bowtie2 --quiet --force --threads {threads} {output.output1}
"""
"__default__": {
"account": "kretzler",
"job-name": "17_{rule}",
"partition": "standard",
"nodes": "1",
"time": "10:00:00",
"ntasks-per-node": "1",
"cpus-per-task": "1",
"mem": "4g",
"output": "{log}.out.txt",
"error": "{log}.err.txt",
"mail-user": "$USER@umich.edu",
"mail-type": "ALL"
},
"HtSeq_Count": {
"cpus-per-task": "{threads}",
"--mem": "16g",
"time": "8:00:00",
"output": "{log}.out.txt",
"error": "{log}.error.log"
},
snakemake -j 1000 --restart-times 2 --max-jobs-per-second 5 --max-status-checks-per-second 5 --cluster-config cluster.json --cluster 'sbatch --job-name {cluster.job-name} --nodes {cluster.nodes} --ntasks-per-node {cluster.ntasks-per-node} --cpus-per-task {cluster.cpus-per-task} --mem {cluster.mem} --partition {cluster.partition} --time {cluster.time} --mail-user {cluster.mail-user} --mail-type {cluster.mail-type} --error {cluster.error} --output {cluster.output}'
我想获取错误或作业失败的原因,将其打印到与每个作业相关联的error.log文件中,如果可能的话,我完全不理解我做错了什么导致失败作业的日志文件消失。
答案 0 :(得分:1)
您需要将命令的输出定向到日志
shell:
"""
cat {input.Fast1} {input.Fast2} 1> {output.output1} 2> {log} && \
/home/manninm/Programs/fastq_screen_v0.14.0/fastq_screen --aligner bowtie2 --quiet --force --threads {threads} {output.output1} > {log}
"""
看看here,了解有关重定向的更多信息。
顺便说一句,Slurm还会在执行snakemake的文件夹中的slurm- [job-id] .out文件中捕获stdout / stderr。