在SLURM sbatch脚本中使用Bashvariables

我试图从另一个文件中获取一个值,并在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 

当我作为一个正常的Bash shell脚本运行这个脚本时,它会正确输出mpirun的数量并进行正确的mpirun调用。 因此, awk命令正确parsing了proc的数量,并且如预期的那样取消了该variables的引用。

但是,当我提交给SLURM使用:

 sbatch myScript.sh 

我得到的错误:

 sbatch: error: Invalid numeric value "`$numProcs`" for number of tasks. 

有人能帮忙吗?

Solutions Collecting From Web of "在SLURM sbatch脚本中使用Bashvariables"

这是行不通的。 当你跑步时会发生什么

sbatch myscript.sh

是slurm解析这些特殊的#SBATCH行的脚本,生成一个工作记录,存储批处理脚本的地方。 批处理脚本仅在作业运行后才执行。

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

sbatch -n $numProcs myscript.sh

,您不需要自动生成脚本(同样,mpirun应该能够自动获取您的分配过程中的过程数,不需要使用“-np”)。