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 给出工作名称我的 SBATCH 魔法看起来像这样:
#SBATCH --output=R-%x.%j.out
#SBATCH --error=R-%x.%j.err
Run Code Online (Sandbox Code Playgroud)
我更喜欢添加R-作为前缀,这样我就可以轻松地移动或删除所有R-*
你不能,至少不是你想要的方式。这些#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)。支持的替换符号有:
Run Code Online (Sandbox Code Playgroud)%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.
小智 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, ...