SLURM集群中Snakemake规则资源配置语法报错排查
排查Snakemake规则内mem_mb_per_cpu资源配置的语法问题
常见错误场景及修复方案
缩进不规范
Snakemake对缩进要求苛刻,resources块必须和规则里的input、output、shell保持同一缩进层级。比如下面这种缩进错位会直接报错:rule samtools_sort: input: "bam/{sample}.bam" output: "sorted_bam/{sample}.sorted.bam" resources: mem_mb_per_cpu=4096 shell: "samtools sort -@ {threads} -m {resources.mem_mb_per_cpu}M {input} -o {output}"调整缩进即可:
rule samtools_sort: input: "bam/{sample}.bam" output: "sorted_bam/{sample}.sorted.bam" resources: mem_mb_per_cpu=4096 shell: "samtools sort -@ {threads} -m {resources.mem_mb_per_cpu}M {input} -o {output}"资源名称拼写错误
必须严格写mem_mb_per_cpu——注意下划线、大小写,别写成mem_mb_per_cpus或者Mem_Mb_Per_Cpu这类变体,Snakemake对资源名的拼写和大小写完全敏感。资源值带单位
mem_mb_per_cpu的默认单位就是MB,别给数值加M或者其他单位,否则会触发语法错误。错误写法:resources: mem_mb_per_cpu="4096M"正确写法:
resources: mem_mb_per_cpu=4096资源配置放错位置
resources必须写在对应的规则块内部,不能全局定义或者放到其他规则里,确保是给samtools sort的规则单独配置资源。shell命令引用错误
要是shell里写了{resources.mem_mb_per_cpu},但规则里没定义这个资源,或者拼写错,也会报错。另外samtools sort的-m参数要加单位,记得在引用后补M,比如-m {resources.mem_mb_per_cpu}M。
快速验证方法
- 用
snakemake --lint检查工作流,它会精准指出语法错误的位置和原因。 - 用
snakemake --dry-run sorted_bam/your_test_sample.sorted.bam做预运行测试,看资源配置是否能正常解析。
内容的提问来源于stack exchange,提问作者hepcat72
相关产品推荐
相关产品推荐

