在SLURM sbatch脚本中使用Bash变量

Mad*_*ent 13 linux bash shell awk slurm

我正在尝试从另一个文件中获取值,并在SLURM提交脚本中使用它.但是,我得到的错误是该值是非数字的,换句话说,它没有被解除引用.

这是脚本:

#!/bin/bash
# This reads out the number of procs based on the decomposeParDict                                                                                          
numProcs=`awk '/numberOfSubdomains/ {print $2}' ./meshModel/decomposeParDict`
echo "NumProcs = $numProcs"

#SBATCH --job-name=SnappyHexMesh                                                                                                                            
#SBATCH --output=./logs/SnappyHexMesh.log                                                                                                                   
#                                                                                                                                                           
#SBATCH --ntasks=`$numProcs`                                                                                                                                
#SBATCH --time=240:00                                                                                                                                       
#SBATCH --mem-per-cpu=4000                                                                                                                                  

#First run blockMesh                                                                                                                                        
blockMesh

#Now decompose the mesh                                                                                                                                     
decomposePar

#Now run snappy in parallel                                                                                                                                 
mpirun -np $numProcs snappyHexMesh -parallel -overwrite
Run Code Online (Sandbox Code Playgroud)

当我将其作为普通的Bash shell脚本运行时,它会正确打印出proc的数量并进行正确的mpirun调用.因此,该awk命令正确地解析了proc的数量,并且按预期解除引用变量.

但是,当我使用以下内容将其提交给SLURM时:

sbatch myScript.sh
Run Code Online (Sandbox Code Playgroud)

我收到错误:

sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks.
Run Code Online (Sandbox Code Playgroud)

有人能帮忙吗?

jan*_*neb 10

这不行.跑步时会发生什么

sbatch myscript.sh

是slurm解析那些特殊的#SBATCH行的脚本,生成一个作业记录,将批处理脚本存储在某处.批处理脚本仅在作业运行时执行.

因此,您需要以稍微不同的方式构建工作流,并在提交作业之前首先计算所需的过程数.请注意,您可以使用类似的东西

sbatch -n $numProcs myscript.sh

,你不需要自动生成脚本(同样,mpirun应该能够自动获得你的分配中的proc数量,不需要使用"-np").