Slurm脚本使用--wait参数时,能否实时显示等待时长?
在Slurm脚本中用--wait时实时显示等待时长的方法
Slurm自带的--wait参数本身没有实时显示等待时长的功能,但你可以通过自己添加简单的计时逻辑来实现这个需求。
核心思路
- 记录等待开始的时间戳
- 后台启动一个循环进程,定期计算并输出已等待的时长
- 主任务完成后终止计时进程
示例脚本
下面是一个结合srun --wait的完整示例:
#!/bin/bash #SBATCH --job-name=wait-timer #SBATCH --nodes=2 #SBATCH --ntasks-per-node=4 # 记录等待开始的时间(秒级时间戳) start_time=$(date +%s) # 后台启动计时进程,每10秒更新一次等待时长 ( while true; do current_time=$(date +%s) elapsed=$((current_time - start_time)) # 格式化为 时:分:秒 并覆盖当前行输出 printf "\r已等待时长: %02d:%02d:%02d" $((elapsed/3600)) $((elapsed%3600/60)) $((elapsed%60)) sleep 10 done ) & # 保存计时进程的PID,方便后续终止 timer_pid=$! # 执行带--wait的srun命令(--wait=0表示一直等待所有任务完成) srun --wait=0 your_parallel_command_here # 主任务完成后,杀死计时进程并换行 kill $timer_pid echo ""
关键细节说明
\r是回车符,作用是让每次输出覆盖当前行,避免大量重复刷屏,实现"实时更新"的视觉效果- 可以调整
sleep的时间(比如改成1秒)来提高更新频率,但太频繁可能会增加输出负载 - 如果是用
sbatch等待其他作业完成(比如配合sacct或squeue轮询),同样可以套用这个计时逻辑,把srun --wait的部分换成你的等待判断循环
内容的提问来源于stack exchange,提问作者justinian482
相关产品推荐
相关产品推荐

