如何获取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
相关产品推荐
相关产品推荐

