如何在PBS Pro自定义标准输出/错误文件名中追加JobID?
在PBS Pro中自定义带JobID的输出/错误文件名
问题原因
你之前的写法无效,核心原因是${PBS_JOBID}是作业运行时才会被赋值的环境变量,但PBS在提交脚本阶段就会解析#PBS -e/-o指令,此时JobID尚未生成,变量会被解析为空值,最终仅生成err.txt和out.txt。
解决方案
方法1:使用PBS内置占位符(推荐)
PBS Pro内置了专门的文件名替换符,提交时会自动替换为对应作业参数,无需依赖环境变量:
%j:仅保留JobID的主体部分(去掉.servername这类后缀)%J:完整的JobID(包含服务器后缀)
直接在#PBS指令中使用这些占位符即可:
# 生成带短JobID的错误文件 #PBS -e err-%j.txt # 生成带短JobID的输出文件 #PBS -o out-%j.txt
提交后会生成类似err-12345.txt、out-12345.txt的文件。如果需要完整JobID,替换为%J即可:
#PBS -e err-%J.txt #PBS -o out-%J.txt
对应生成err-12345.login01.txt这类格式的文件。
方法2:脚本运行时手动重定向
如果需要更灵活的命名规则(比如追加日期、用户名等),可以在脚本主体部分(非#PBS指令区)手动重定向输出,此时$PBS_JOBID已被正确赋值:
# 可选:禁用PBS默认的输出/错误文件,避免生成冗余文件 #PBS -e /dev/null #PBS -o /dev/null # 提取短JobID并自定义文件名 JOB_ID_SHORT=${PBS_JOBID%%.*} # 重定向标准输出和错误到目标文件 exec 1>out-${JOB_ID_SHORT}.txt 2>err-${JOB_ID_SHORT}.txt # 此处写入你的作业命令 your_task_command
示例扩展:追加日期和用户名
JOB_ID_SHORT=${PBS_JOBID%%.*} CURRENT_DATE=$(date +%Y%m%d) USER_NAME=$(whoami) exec 1>${USER_NAME}_${CURRENT_DATE}_out-${JOB_ID_SHORT}.txt 2>${USER_NAME}_${CURRENT_DATE}_err-${JOB_ID_SHORT}.txt
验证方式
提交作业后,可通过qstat -f <你的作业ID>命令查看作业的Error_Path和Output_Path属性,确认文件名是否符合预期。
内容的提问来源于stack exchange,提问作者Tissot11
相关产品推荐
相关产品推荐

