SLURM:自定义标准输出名称

rmf*_*rmf 15 bash cluster slurm

使用 运行 SLURM 作业时sbatch,slurm 会生成一个标准输出文件,看起来像 slurm-102432.out (slurm-jobid.out)。我想将此自定义为 (yyyymmddhhmmss-jobid-jobname.txt)。我该怎么做?

或者更一般地说,我如何在sbatch参数中包含计算变量-o

我在我的 script.sh 中尝试了以下内容

#SBATCH -p core
#SBATCH -n 6
#SBATCH -t 1:00:00
#SBATCH -J indexing
#SBATCH -o "/home/user/slurm/$(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt"
Run Code Online (Sandbox Code Playgroud)

但这没有用。文件在新目录中的位置是正确的,但文件名只是文字 line $(date +%Y%m%d%H%M%S)-$(SLURM_JOB_ID)-indexing.txt

所以,我正在寻找一种方法来将标准输出文件保存在/home/user/slurm/一个文件名如下的目录中:20160526093322-10453-indexing.txt

Tha*_*wda 12

这是我从以前的答案中摘取的

  • %j 给出工作 ID
  • %x 给出工作名称
  • 我不知道如何以所需格式获取日期。作业 ID 种类作为跨运行的唯一标识符,文件修改日期捕获日期以供以后分析。

我的 SBATCH 魔法看起来像这样:

#SBATCH --output=R-%x.%j.out
#SBATCH --error=R-%x.%j.err
Run Code Online (Sandbox Code Playgroud)

我更喜欢添加R-作为前缀,这样我就可以轻松地移动或删除所有R-*


cas*_*cas 9

你不能,至少不是你想要的方式。这些#SBATCH行是 shell 注释,碰巧由sbatch命令解释,您不能在其中执行 shell 代码。

此外,sbatch's-o选项只能理解一组非常有限的替换符号(请参阅下面的手册页摘录)。

可能最接近您想要的内容是sbatch在包装脚本中运行,该脚本将作业 ID、作业名称和当前日期和时间附加到文本文件(例如timestamp<TAB>jobid<TAB>jobname)中,然后在作业完成运行后使用它来重命名输出文件。

time_t 或 seconds-since-the-epoch,即date +%s,是脚本中最有用的日期/时间格式。它可以很容易地被漂亮地打印出来,而无需先解析它。

编写一个脚本来遍历该文本文件,并为每个不再运行的 jobid 重命名输出文件(检查squeue -t BF,CA,CD,F,NF,PR,TO)并且尚未重命名,这并不困难。

仅供参考,手册页sbatch说:

-o, --output=

指示 Slurm 将批处理脚本的标准输出直接连接到“文件名模式”中指定的文件名。默认情况下,标准输出和标准错误都指向同一个文件。对于作业数组,默认文件名是slurm-%A_%a.out%A由作业 ID 和%a数组索引替换。对于其他作业,默认文件名为slurm-%j.out,其中%j由作业 ID 替换。有关--input option文件名规范选项,请参阅。

而且,因为-i它说:

-i, --input=

指示 Slurm 将批处理脚本的标准输入直接连接到“文件名模式”中指定的文件名。默认情况下,/dev/null在批处理脚本的标准输入上打开,标准输出和标准错误都指向名称为 的文件slurm-%j.out,其中%j用作业分配编号替换,如下所述。

文件名模式可能包含一个或多个替换符号,它们是一个百分号%后跟一个字母(例如%j)。

支持的替换符号有:

%A Job array's master job allocation number.
%a Job array ID (index) number.
%j Job allocation number.
%N Node name. Only one file is created, so %N will be replaced
   by the name of the first node in the job, which is the one
   that runs the script.
%u User name.
Run Code Online (Sandbox Code Playgroud)


小智 7

sbatch命令的文档提供了允许的字符替换的完整列表:在sbatch 手册页

文件名模式 sbatch 允许文件名模式包含一个或多个替换符号,它们是百分号“%”后跟一个字母(例如 %j)。

\\ 不要处理任何替换符号。

%% 人物 ”%”。

%A 作业阵列的主作业分配编号。

%a 作业数组 ID(索引)编号。

%J jobid.stepid 正在运行的作业。(例如“128.0”)

%j 正在运行的作业的作业 ID。

%N 短主机名。这将为每个节点创建一个单独的 IO 文件。

%n 相对于当前作业的节点标识符(例如“0”是正在运行的作业的第一个节点)这将为每个节点创建一个单独的 IO 文件。

正在运行的作业的 %s stepid。

%t 相对于当前作业的任务标识符(等级)。这将为每个任务创建一个单独的 IO 文件。

%u 用户名。

%x 作业名称。

百分比字符和格式说明符之间的数字可用于对 IO 文件名中的结果进行零填充。如果格式说明符对应于非数字数据(例如 %N),则忽略此数字。

下面包含了一些关于如何将格式字符串用于作业 ID 为 128 和步骤 ID 为 0 的 4 个任务作业步骤的示例:

工作%J.out

job128.0.out

作业%4j.out

job0128.out

作业%j-%2t.out

job128-00.out, job128-01.out, ...