如何取消特定时间或指定job id之后创建的所有sbatch作业
Slurm 批量取消指定规则作业的实现方法
scancel 本身没有内置类似 -gt 的大小比较语法,你提到的组合 sacct 输出的方案是目前最通用的实现方式,两种需求的具体操作如下:
取消所有Job ID大于指定值的活跃作业
直接通过 sacct 的条件筛选功能匹配符合要求的作业ID,再传给 scancel 即可,示例如下:
# 将12345替换为你的指定Job ID阈值 scancel $(sacct -X -n -o jobid --state=PD,R --where "jobid>12345")
参数说明:
-X:仅返回作业主记录,不输出作业子步骤,避免重复匹配-n:隐藏输出表头,只保留纯作业ID内容--state=PD,R:仅匹配处于排队(Pending)、运行(Running)状态的活跃作业,不会命中已结束的历史作业--where "jobid>12345":自定义筛选规则,匹配ID大于阈值的作业
取消所有创建时间晚于指定时间的活跃作业
同样用 sacct 的时间筛选规则即可实现,支持固定时间和相对时间两种写法:
固定时间写法示例
# 将时间替换为你需要的阈值,格式为 YYYY-MM-DDTHH:MM:SS scancel $(sacct -X -n -o jobid --state=PD,R --where "submit>=2024-05-20T14:30:00")
相对时间写法示例
# 取消过去1小时内提交的所有活跃作业 scancel $(sacct -X -n -o jobid --state=PD,R --where "submit>=now-1hour")
注意事项
执行前可以先单独运行$()内的 sacct 命令,确认输出的作业ID符合预期后再拼接 scancel 执行,避免误删作业。
内容的提问来源于stack exchange,提问作者mkk
相关产品推荐
相关产品推荐

