Snakemake规则文件本地PC正常运行,远程Linux异常求助
Snakemake远程Linux主机执行故障排查
本地执行正常情况
在个人PC执行如下命令:
snakemake -s compores_rules.rules --forceall -c 1
运行正常,得到任务统计:
Job stats:
job count min threads max threadsall 1 1 1
hierarchical_cluster 2 1 1
plot_clusters 1 1 1
prepare_OTU 2 1 1
run_compo_res 1 1 1
run_fastspar 2 1 1
total 9 1 1
远程Linux主机执行异常情况
在远程Linux主机执行上述相同命令时,仅第一个规则运行,无任何报错信息。已确认输入文件路径与本地完全一致,本地因缺少Linux专属包仅完成6个规则,远程环境本应完成全部7个规则。
首个失效规则代码
首个未正常运行的prepare_OTU规则代码如下:
rule prepare_OTU: input: # microbiome_file=pathToMicrobiome+"/{antibiotic}-{treatment}-{location}.tsv" microbiome_file = expand([pathToMicrobiome + "/{antibiotic}-{treatment}-{location}.tsv"],antibiotic=antibiotics,treatment=treatments,location=locations) output: "preprocess/OTU_clustring/{antibiotic}-{treatment}-{location}.tsv" run: pg.prepare_OTU(input.microbiome_file) print("Path to Microbiome:",pathToMicrobiome) print("Input Files:",input.microbiome_file) isExist = os.path.exists(os.path.join("preprocess","OTU_clustring")) if not isExist: # Create a new directory because it does not exist os.makedirs(os.path.join("preprocess","OTU_clustring"))
可能的故障排查方向
- 权限与路径问题:检查远程主机上
preprocess/OTU_clustring目录的写入权限,以及输入文件的可读权限。Linux下权限不足可能导致静默失败,比如无权限创建输出目录时,规则可能直接终止但不报错。 - 变量定义差异:确认远程环境中
antibiotics、treatments、locations变量的定义与本地完全一致。若远程环境中这些变量为空或取值不同,expand生成的输入文件列表可能为空,导致规则被Snakemake判定为无需执行。 - 依赖函数异常:
pg.prepare_OTU函数在远程环境中可能存在隐性错误,比如依赖的Python包缺失、输入文件格式在Linux下处理逻辑不兼容,但未抛出异常。建议在run块开头添加详细日志,或单独调用该函数测试输入文件的处理情况。 - Snakemake版本差异:对比本地与远程主机的Snakemake版本(执行
snakemake --version),不同版本的语法或执行逻辑可能存在差异,导致规则解析或执行异常。尝试统一两端版本后重新测试。 - 输出文件校验问题:Snakemake可能误判输出文件已存在或符合预期,从而跳过规则。添加
--printshellcmds参数运行,查看是否实际执行了规则逻辑;或删除远程主机上所有输出文件后,重新执行--forceall命令。
内容的提问来源于stack exchange,提问作者Amit Yehuda
相关产品推荐
相关产品推荐

