如何在保留默认文件名的同时修改PBS输出与错误文件的默认目录?
PBS脚本指定输出目录并保留默认文件名的解决方案
问题的核心在于:你直接在#PBS -o中使用$PBS_JOBNAME、$PBS_JOBID这类环境变量是无效的——这些变量是作业启动运行后才会被PBS设置的,而#PBS指令是由qsub在提交阶段解析的,此时还没有这些变量的实际值。
下面提供两种可行的解决方法:
方法1:使用PBS内置占位符(推荐)
绝大多数PBS衍生版本(如Torque、PBS Pro)支持在-o参数中用特殊占位符指代作业名和ID,常用的占位符包括:
%N:对应作业名(即PBS_JOBNAME的值)%j:对应作业ID(即PBS_JOBID的值)
你只需要在脚本里这么写即可:
#PBS -o /path/to/my/%N.o%j # 若要同步指定错误文件路径,保持相同格式: #PBS -e /path/to/my/%N.e%j
提交作业后,qsub会自动将占位符替换为实际的作业名和ID,生成类似/path/to/my/my_test_job.o123456的输出文件,完全符合你“只改目录、保留默认文件名格式”的需求。
方法2:脚本内手动重定向输出(兼容所有PBS版本)
如果你的PBS版本不支持占位符,可以放弃#PBS -o,转而在脚本运行时利用已生效的环境变量手动重定向输出:
#!/bin/bash # 定义输出目录 OUTPUT_DIR="/path/to/my" # 确保目录存在,不存在则创建 mkdir -p "$OUTPUT_DIR" # 重定向标准输出和错误到指定目录的默认格式文件 exec > "$OUTPUT_DIR/${PBS_JOBNAME}.o${PBS_JOBID}" 2>&1 # 以下是你的作业执行命令 echo "作业启动成功" your_task_command_here
这种方式是在作业启动后,借助PBS已经设置好的PBS_JOBNAME和PBS_JOBID变量生成文件名,同样能达到预期效果。
内容的提问来源于stack exchange,提问作者rdv
相关产品推荐
相关产品推荐

