Sbatch: 将作业名称作为输入参数传递

20

我有以下脚本用于提交slurm作业:

#!/bin/sh
#!/bin/bash
#SBATCH -J $3 #job_name 
#SBATCH -n 1 #Number of processors
#SBATCH -p CA 

nwchem $1 > $2

第一个参数($1)是我的输入,第二个参数($2)是我的输出,我希望第三个参数($3)成为我的作业名称。如果我这样做,作业名称就是“$3”。我该如何将作业名称作为脚本的参数进行传递呢?

谢谢。

2个回答

23

SSBATCH指令被shell视为注释,并且不会对$3进行变量替换。有几种解决方案:

选项1:在命令行上传递-J参数:

sbatch -J thejobname submission_script.sh input.data output.res

选项2:通过stdin传递脚本,将位置参数($1$2等)替换为命名参数。

IN=input.data OUT=output.res NAME=thejobname <submission_script.sh sbatch 

选项3:编写一个包装器

#!/bin/bash
sbatch <<EOT
#!/bin/sh
#SBATCH -J $3 #job_name 
#SBATCH -n 1 #Number of processors
#SBATCH -p CA 

nwchem $1 > $2
EOT

然后像这样使用它:

submit.sh input.data output.red thejobname

注意第二个shebang (#!/bin/bash) 是无用的,会被(父级)shell 忽略。


当您使用这种方法时,SLURM_SUBMIT_DIR会发生什么? - PartialOrder
选项1对我有效。我执行了sbatch -J $3 run.sh,并且在squeue中正确反映了作业名称。 - user0193

0
假设您已经安装了`srun`和`sbatch`,您可以在`sbatch`脚本中运行一个`srun`一行命令。大部分`sbatch`参数也可以与`srun`一起使用。
#!/bin/sh
#!/bin/bash
#SBATCH -n 1 #Number of processors
#SBATCH -p CA 

srun nwchem -J $3 $1 > $2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接