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

如何获取SLURM中指定用户最近X个已完成作业的ID或最近X小时内运行的所有作业ID?

嘿,这个需求其实SLURM自带的工具就能轻松搞定,完全不用自己费劲去解析输出文件~我分两种场景给你捋清楚:

一、获取本人最近X个已完成的SLURM作业ID

直接用sacct配合几个参数就能精准筛选,命令示例如下:

sacct -u $USER --state=COMPLETED -n -o jobid | tail -n X

给你拆解释下每个参数的作用:

  • -u $USER:只查询当前用户的作业,不用手动输自己的用户名;
  • --state=COMPLETED:过滤出已经完成的作业,如果需要包含失败、节点故障等其他终端状态,可以改成--state=COMPLETED,FAILED,NODE_FAIL;
  • -n:去掉输出的表头行,只保留纯作业ID;
  • -o jobid:指定只输出作业ID字段,避免多余信息;
  • tail -n X:取最后X行,也就是最近完成的X个作业ID。
二、获取最近X小时内运行的所有本人作业ID

这里核心是用sacct的--starttime参数来指定时间范围,命令示例:

sacct -u $USER -n -o jobid --starttime $(date -d "-X hours" +%Y-%m-%dT%H:%M:%S)

解释下细节:

  • --starttime后面跟的是X小时前的时间,用date命令自动生成符合SLURM要求的时间格式(YYYY-MM-DDTHH:MM:SS);
  • 如果只想看这个时间段内已完成的作业,加上--state=COMPLETED就行;要是想包含正在运行的,去掉这个参数即可。
三、关于提前规划这类需求的小建议

确实提前规划能省不少事,给你几个实用方向:

  • 把常用命令做成bash别名:比如在~/.bashrc里加一行alias recent_10_jobs='sacct -u $USER --state=COMPLETED -n -o jobid | tail -n 10',之后直接敲recent_10_jobs就能拿到最近10个完成作业的ID,不用每次输长命令;
  • 定期采集作业数据:如果需要长期跟踪作业指标,写个简单的shell脚本,结合cron定时运行,把需要的字段(比如jobid、运行时长、CPU利用率)存到本地文件或者轻量数据库里,后续分析直接查这个存储就行,不用反复调用sacct;
  • 吃透sacct的参数:平时多看看sacct --help或者man sacct,里面有很多过滤选项(比如--endtime指定结束时间、--partition筛选队列),熟悉之后能灵活应对各种查询需求,比事后临时找方法高效太多。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 15:22:43