如何在SLURM作业完成后将seff展示的资源使用情况记录到文件?
在SLURM作业完成后记录seff资源使用情况的方法
以下几种方案可以帮你把seff的输出保存到文件,避免被系统清理:
方案1:作业脚本内自动记录(最常用)
直接在你的SLURM作业脚本里添加逻辑,让作业结束后自动调用seff并写入文件。如果想确保异常终止也能记录,用trap捕捉退出信号更稳妥。
基本版本(仅正常结束时记录)
#!/bin/bash #SBATCH --job-name=my_job #SBATCH --output=job_%j.out #SBATCH --error=job_%j.err # 这里放你的实际作业命令 echo "Running job..." sleep 60 # 作业完成后记录seff结果 seff $SLURM_JOB_ID >> job_${SLURM_JOB_ID}_seff.log
增强版本(异常终止也记录)
#!/bin/bash #SBATCH --job-name=my_job #SBATCH --output=job_%j.out #SBATCH --error=job_%j.err # 定义记录函数 save_seff() { seff $SLURM_JOB_ID >> job_${SLURM_JOB_ID}_seff.log } # 捕捉EXIT信号,不管作业是正常完成还是中途失败,都会执行记录 trap save_seff EXIT # 你的作业命令 echo "Running job..." sleep 60
执行后会生成以作业ID命名的seff日志文件,比如job_12345_seff.log。
方案2:将seff结果追加到作业日志
如果不想单独生成文件,也可以把seff的输出直接追加到作业的标准输出或错误日志里:
# 追加到标准输出日志(对应--output参数的文件) seff $SLURM_JOB_ID >> $SLURM_OUTPUT # 或者追加到标准错误日志(对应--error参数的文件) seff $SLURM_JOB_ID >> $SLURM_ERROR
方案3:用sacct替代(应对seff无法调用的情况)
如果作业被系统清理后seff无法获取信息,可以用sacct命令提取资源数据,它的历史保留时间通常更长,输出格式也更规整:
sacct -j $SLURM_JOB_ID --format=JobID,JobName,Elapsed,AllocCPUs,CPUTime,MaxRSS,MaxVMSize >> job_${SLURM_JOB_ID}_resource.log
这个命令会提取作业的核心资源使用信息,和seff的内容基本一致。
内容的提问来源于stack exchange,提问作者shians
相关产品推荐
相关产品推荐

