使用带换行的替换符号进行slurm

问题描述 投票:0回答:1

我使用

--wrap
选项向 slurm 提交单个脚本,但我也希望它向日志文件添加运行时间。

  sbatch \
    -J nom \
    --mem=16G \
    -c 4 \
    -t 24:00:00 \
    -p partition \
    -A acount \
    -o %A_scriptname_%x.log \
    --wrap "echo 'hello world'; squeue -j %A --Format=TimeUsed"

为了获取 job_id,我尝试了替换字符串

%A
和脚本变量
$SLURM_JOBID
。前者返回错误
squeue: error: Invalid job id: %A
,后者无法识别作业 ID,并打印服务器上所有活动作业的 TimeUsed。是否有一种格式可以在引用的部分中使用来插入替换字符串?

slurm
1个回答
0
投票

%A
占位符仅在
--output
参数中可用。您将需要使用工作 ID。

命令行中的变量必须转义,因为它在调用命令时尚未定义,只会在作业中定义。因此,Bash 在提交之前会将其扩展为空字符串。因此,它必须按字面意思传递到工作中:

--wrap "echo 'hello world'; squeue -j \$SLURM_JOB_ID --Format=TimeUsed"

这与您在提交环境中使用的其他变量不同,例如

Rscript run.R -v $var1 -s $var2

在这种情况下,当您提交作业时,变量已经在环境中定义,并且它们在提交之前被扩展。

© www.soinside.com 2019 - 2024. All rights reserved.