You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Slurm --wrap提交脚本时,如何获取Job ID并写入日志?

解决Slurm --wrap中获取Job ID并记录运行时间的问题

问题原因分析

  1. %A 在--wrap中无效:Slurm的%A占位符仅会替换sbatch命令行中直接指定的参数(比如-o日志文件名里的占位符),不会解析--wrap内部的%A。作业运行时,%A会被当作普通字符串传递给squeue,自然报无效Job ID错误。
  2. 未转义的$SLURM_JOBID失效:如果用双引号包裹--wrap内容,提交作业的shell会先展开$SLURM_JOBID——此时作业还未创建,这个变量是空值,导致squeue没有指定具体Job ID,从而返回所有活跃作业的运行时间。

正确解决方案

核心思路是让$SLURM_JOBID在作业运行时被Slurm的环境变量替换,而非提交时被shell展开,以下是两种可行写法:

方法1:用单引号包裹--wrap内容

单引号会阻止shell展开内部变量,作业运行时Slurm会自动设置$SLURM_JOBID环境变量,此时就能正确获取当前Job ID:

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 $SLURM_JOBID --Format=TimeUsed'

方法2:转义双引号内的$符号

如果需要在--wrap中使用双引号,给$SLURM_JOBID的$加反斜杠转义,避免提交时被shell展开:

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 \$SLURM_JOBID --Format=TimeUsed"

内容的提问来源于stack exchange,提问作者dragon951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 21:42:05