Snakemake结合Slurm用scancel取消任务时作业ID无效问题求助
问题:Snakemake调用scancel时作业ID解析错误
运行命令:
snakemake --profile slurm -j 1 --cores 1 --cluster-cancel "scancel"
提交作业后输出:
Submitted job 224 with external jobid 'Submitted batch job 54174212'.
按下ctrl + c取消时触发错误:
scancel: error: Invalid job id Submitted batch job 54174212
原因是Snakemake将Slurm返回的完整提交信息当作作业ID传给scancel,而非提取其中的数字ID54174212。
解决方案
方法1:直接在命令行自定义cluster-cancel命令
通过shell工具提取数字ID后再调用scancel,替换原--cluster-cancel参数:
snakemake --profile slurm -j 1 --cores 1 --cluster-cancel "echo {jobid} | sed -n 's/.*batch job \\([0-9]*\\).*/\\1/p' | xargs scancel"
原理:{jobid}会被Snakemake替换为完整的提交字符串,sed通过正则提取其中的数字ID,最后传给scancel。
也可以用awk简化:
snakemake --profile slurm -j 1 --cores 1 --cluster-cancel "echo {jobid} | awk '{print \$4}' | xargs scancel"
方法2:修改Slurm Profile配置文件
如果使用了Slurm profile(通常路径为config/slurm/config.yaml),在配置文件中添加以下内容:
# 自定义作业ID解析规则,提取数字ID jobid_parser: "sed -n 's/.*batch job \\([0-9]*\\).*/\\1/p'" # 或者用awk的写法 # jobid_parser: "awk '{print $4}'" # 指定取消命令,此时{jobid}会是解析后的纯数字 cluster-cancel: "scancel {jobid}"
保存配置后,直接运行原命令即可,Snakemake会自动先解析作业ID再调用scancel。
内容的提问来源于stack exchange,提问作者curious
相关产品推荐
相关产品推荐

