如何暂停Slurm数组作业以完成集群维护并恢复执行?
解决Slurm数组作业暂停与恢复的方案
一、暂停数组作业(停止新任务调度,等待现有任务完成)
你之前设置分区为DRAIN无效,是因为Slurm的分区状态仅限制新提交的作业,而你的数组作业已在队列中,调度器仍会继续调度其未执行的子任务。直接操作数组作业本身才能实现需求:
阻止新子任务调度
执行命令将数组作业设为HOLD状态,立即停止新子任务分配到节点:scontrol hold <job-id>其中
<job-id>是你的数组作业ID,可通过squeue命令查看。等待现有任务完成
用squeue -j <job-id>监控任务状态,直到所有RUNNING状态的子任务变为COMPLETED。确认作业暂停
此时作业状态会变为HOLD,不会再启动新子任务,可安全关闭集群进行维护。
二、维护完成后恢复数组作业
集群重启并确认Slurm服务(slurmctld、slurmd)正常运行后,执行以下命令恢复作业,未完成的子任务会继续调度执行:
scontrol release <job-id>
三、备选方案(立即暂停所有任务)
若无需等待现有任务完成,可直接暂停所有运行中的子任务(需确保./runone脚本支持断点续跑,否则可能导致任务重复或失败):
- 暂停所有子任务:
scontrol suspend <job-id> - 恢复所有子任务:
scontrol resume <job-id>
内容的提问来源于stack exchange,提问作者Terry Ligocki
相关产品推荐
相关产品推荐

