我使用
--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。是否有一种格式可以在引用的部分中使用来插入替换字符串?
%A
占位符仅在 --output
参数中可用。您将需要使用工作 ID。
命令行中的变量必须转义,因为它在调用命令时尚未定义,只会在作业中定义。因此,Bash 在提交之前会将其扩展为空字符串。因此,它必须按字面意思传递到工作中:
--wrap "echo 'hello world'; squeue -j \$SLURM_JOB_ID --Format=TimeUsed"
这与您在提交环境中使用的其他变量不同,例如
Rscript run.R -v $var1 -s $var2
在这种情况下,当您提交作业时,变量已经在环境中定义,并且它们在提交之前被扩展。