You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将PBS脚本的输出与错误文件以当前时间命名保存?

解决PBS脚本输出/错误文件以时间戳命名的问题

问题根源:PBS调度器不会解析#PBS指令中的shell命令(如$(date)),只会将其当作文件名的一部分,因此直接写在#PBS -o/-e中会原样输出。

方案1:在脚本主体中重定向输出(推荐)

修改脚本,在bash执行逻辑中生成时间戳,通过exec重定向所有输出和错误:

#!/bin/bash
#PBS -l select=1:ncpus=2:mem=1GB,walltime=00:02:00
#PBS -N PBS_test
#PBS -V
#PBS -q Hercules
#PBS -v CONTAINER_IMAGE=docker_img

# 生成时间戳并定义输出目录
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
OUTPUT_DIR="path_to_dir"

# 确保输出目录存在(可选,防止目录不存在导致写入失败)
mkdir -p "${OUTPUT_DIR}"

# 重定向标准输出和错误到对应文件
exec > "${OUTPUT_DIR}/output_${TIMESTAMP}.log" 2> "${OUTPUT_DIR}/error_${TIMESTAMP}.log"

# 后续作业命令示例
echo "作业开始执行"
# rest of your commands

脚本执行时,$(date)会被bash正确解析为当前时间戳,输出和错误会写入目标格式的文件。

方案2:提交作业时通过命令行指定输出文件

若不想修改脚本,可在qsub提交时直接指定带时间戳的路径,此时shell会先解析$(date)再传递给调度器:

qsub -o "path_to_dir/output_$(date +%Y%m%d_%H%M%S).log" -e "path_to_dir/error_$(date +%Y%m%d_%H%M%S).log" your_script.sh

注意:此方式的时间戳是作业提交时间,若作业需要排队,会和实际启动时间存在偏差。

方案3:使用PBS作业启动时间(更准确)

若需记录作业实际启动的时间,可利用PBS提供的PBS_JOBSTARTTIME环境变量,转换为目标格式:

#!/bin/bash
#PBS -l select=1:ncpus=2:mem=1GB,walltime=00:02:00
#PBS -N PBS_test
#PBS -V
#PBS -q Hercules
#PBS -v CONTAINER_IMAGE=docker_img

# 从PBS_JOBSTARTTIME提取并转换时间戳
TIMESTAMP=$(date -d "${PBS_JOBSTARTTIME}" +%Y%m%d_%H%M%S)
OUTPUT_DIR="path_to_dir"

mkdir -p "${OUTPUT_DIR}"
exec > "${OUTPUT_DIR}/output_${TIMESTAMP}.log" 2> "${OUTPUT_DIR}/error_${TIMESTAMP}.log"

# 后续作业命令...

此方式的时间戳是作业被调度器实际启动的时间,更贴合作业执行的真实节点。

内容的提问来源于stack exchange,提问作者Hrishikesh Satarkar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 23:23:12