Slurm:自动重新提交达到wall-time限制的作业
解决Slurm作业超wall-time自动重启的问题
可行方案一:在作业脚本内部自动提交新作业
直接修改你的test.sh脚本,在模拟未完成时自动提交新的同脚本作业,核心是让脚本自我触发续跑,同时必须确保模拟程序支持断点续跑(能从上次中断的进度继续执行)。
修改后的test.sh示例:
#!/bin/bash #SBATCH --time=24:00:00 # 添加你的其他SBATCH配置(比如节点数、内存等) # 执行模拟,假设你的程序会读取/写入进度文件(比如progress.log) ./your_simulation_executable --resume progress.log # 判断模拟是否完成(根据实际情况调整判断条件,比如检查是否生成完成标志文件) if [ ! -f simulation_finished.flag ]; then # 提交新作业继续运行 sbatch test.sh fi
可行方案二:使用Slurm内置的--requeue参数
Slurm提供了--requeue参数,当作业因wall-time耗尽被系统终止时,会自动将作业重新排入队列,无需手动提交。
提交作业的命令:
sbatch --requeue test.sh
⚠️ 注意:同样需要模拟程序支持断点续跑,否则每次重启都会从头执行;部分集群可能限制重排队的次数,建议提前确认集群的Slurm配置。
为什么你的原方法不可行
你尝试的scontrol update jobid $jobid dependency=after:$jobid逻辑不成立:after:$jobid是指定新作业在原作业结束后运行,但你在提交原作业时无法预知后续新作业的ID,且原作业结束后才会生成新作业,这种循环依赖的方式无法实现自动续跑的需求。
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

