使用Singularity容器运行R脚本(Slurm提交)遇路径报错求助
问题解决:Singularity容器内找不到R脚本
- 核心问题是脚本最后一行没有正确解析变量:你写的
Rscript SCRIPT_R会让容器把"SCRIPT_R"当成字面文件名,而非你定义的变量对应的实际路径。再加上你把本地工作目录绑定到了容器内的/home,容器内根本不存在叫"SCRIPT_R"的文件,自然报错。
修正后的完整脚本
#!/bin/bash #SBATCH --job-name=linda #SBATCH --output=./log/linda.out #SBATCH --error=./log/linda.err #SBATCH --cpus-per-task=10 #SBATCH --mem=40G WD="/my/working/directory" LINDA_SINGULARITY_IMG="/directory/to/linda/image/linda_latest.sif" SCRIPT_R=${WD}"/LINDA_script.R" # 容器内的脚本路径,对应绑定的/home目录 CONTAINER_SCRIPT="/home/LINDA_script.R" srun singularity run --cleanenv --bind ${WD}:/home ${LINDA_SINGULARITY_IMG} Rscript ${CONTAINER_SCRIPT}
两种简化修正思路
- 直接用容器内的固定路径:既然已经把
${WD}绑定到容器/home,直接写容器内的脚本路径就行,不用额外变量:srun singularity run --cleanenv --bind ${WD}:/home ${LINDA_SINGULARITY_IMG} Rscript /home/LINDA_script.R - 保持本地与容器路径一致:把本地目录绑定到容器内的同名路径,这样直接用本地变量即可,不用转换路径:
srun singularity run --cleanenv --bind ${WD}:${WD} ${LINDA_SINGULARITY_IMG} Rscript ${SCRIPT_R}
内容的提问来源于stack exchange,提问作者simthi
相关产品推荐
相关产品推荐

