Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 在设置工作目录之前,如何为Slurm作业创建新目录?_Bash_Slurm_Working Directory_Sbatch - Fatal编程技术网

Bash 在设置工作目录之前,如何为Slurm作业创建新目录?

Bash 在设置工作目录之前,如何为Slurm作业创建新目录?,bash,slurm,working-directory,sbatch,Bash,Slurm,Working Directory,Sbatch,我想为我运行的每个Slurm作业创建一个唯一的目录。但是,mkdir似乎会中断SBATCH命令。例如,当我尝试时: #!/bin/bash #SBATCH blah blah other Slurm commands mkdir /path/to/my_dir_$SLURM_JOB_ID #SBATCH --chdir=/path/to/my_dir_$SLURM_JOB_ID touch test.txt …Slurm执行会在/path/to/my_dir\u$Slurm_JOB\u I

我想为我运行的每个Slurm作业创建一个唯一的目录。但是,
mkdir
似乎会中断
SBATCH
命令。例如,当我尝试时:

#!/bin/bash

#SBATCH blah blah other Slurm commands
mkdir /path/to/my_dir_$SLURM_JOB_ID
#SBATCH --chdir=/path/to/my_dir_$SLURM_JOB_ID

touch test.txt
…Slurm执行会在
/path/to/my_dir\u$Slurm_JOB\u ID
处忠实地创建目录,但会跳过
--chdir
命令,并从调用批处理的工作目录执行sbatch脚本

是否有方法为作业的输出创建唯一目录,并在单个sbatch脚本中设置工作目录?

首先,
#sbatch
选项必须位于文件顶部,并引用

在任何可执行命令之前

因此,在这种情况下,
--chdir
是不受尊重的。问题的基本原理是,Slurm使用
#SBATCH
选项,尤其是
--chdir
来设置作业启动的环境。该环境必须在作业开始前确定,并且不能在作业开始后由Slurm修改

出于类似原因,环境变量不在
#SBATCH
选项中处理;Bash只是简单地忽略了它们,因为它们位于注释行中,而Slurm并不努力扩展它们本身

还要注意,
--chdir
用于

在执行批处理脚本之前,将其工作目录设置为directory

并且该目录必须存在。Slurm不会为您创建它

您需要做的是在脚本中调用
cd
命令

#!/bin/bash

#SBATCH blah blah other Slurm commands

WORKDIR=/path/to/my_dir_$SLURM_JOB_ID
mkdir -p "$WORKDIR" && cd "$WORKDIR" || exit -1 

touch test.txt
请注意
退出-1
,这样,如果目录创建失败,您的作业将停止,而不是在提交目录中继续


作为旁注,在脚本中添加
set-euo pipefail
行总是很有趣的。它确保您的脚本

调用
cd
在回顾时显得如此明显。谢谢对于我的代码,
pipefail
也是一个完美的补充,因为在分叉代码中获得适当的kill并不总是干净的。我希望我能再次投你赞成票。