如何在Autosys作业的std_out_file中追加日期时间生成新日志?
嘿,我来给你几个不需要依赖全局变量和额外每日更新作业的方案,亲测实用:
方法1:直接在std_out_file中嵌入Shell日期命令(Unix/Linux环境)
如果你的Autosys作业运行在Unix/Linux系统上,完全可以直接在作业定义的std_out_file参数里用Shell的命令替换来生成时间戳文件名。Autosys会在作业启动时让Shell解析这个命令,自动生成带当前时间的日志文件。
示例作业定义片段:
insert_job: my_target_job job_type: CMD command: /path/to/your/job/script.sh std_out_file: "/opt/autosys/logs/myjob_`date +%Y%m%d_%H%M%S`.log" std_err_file: "/opt/autosys/logs/myjob_`date +%Y%m%d_%H%M%S`.err"
这里的date +%Y%m%d_%H%M%S会生成类似20240520_143022的时间戳,确保每次运行的日志文件名唯一。
方法2:利用Autosys内置的作业启动时间变量
部分Autosys版本支持内置的$AUTOS_START_TIME变量,这个变量会自动记录作业开始的时间(格式通常为YYYYMMDDHHMMSS),直接用它来命名日志文件更简洁,不需要调用外部Shell命令。
示例作业定义片段:
insert_job: my_target_job job_type: CMD command: /path/to/your/job/script.sh std_out_file: "/opt/autosys/logs/myjob_$AUTOS_START_TIME.log" std_err_file: "/opt/autosys/logs/myjob_$AUTOS_START_TIME.err"
注意:不同Autosys版本的变量格式可能略有差异,建议先测试一下这个变量的输出格式是否符合你的需求。
方法3:在作业脚本内部处理日志重定向
如果你的作业核心逻辑是通过脚本执行的,那可以把日志文件名的生成逻辑放到脚本里,直接在脚本内部重定向输出。这种方式更灵活,还能统一管理标准输出和错误输出。
示例Shell脚本(myjob_script.sh):
#!/bin/bash # 生成带时间戳的日志文件名 TIMESTAMP=$(date +%Y%m%d_%H%M%S) LOG_FILE="/opt/autosys/logs/myjob_${TIMESTAMP}.log" # 将所有输出重定向到日志文件 exec > "$LOG_FILE" 2>&1 # 这里写你的作业逻辑 echo "Job started at $(date)" # ... 其他作业命令
然后在Autosys作业里直接调用这个脚本即可,不需要再设置std_out_file和std_err_file参数(或者可以留空,让脚本自己处理)。
针对Windows环境的适配
如果你的Autosys运行在Windows系统上,可以用系统内置的%date%和%time%变量来生成时间戳,不过需要处理格式中的空格和分隔符:
示例作业定义的std_out_file参数:
std_out_file: "C:\\autosys\\logs\\myjob_%date:~-4,4%%date:~-10,2%%date:~-7,2%_%time:~0,2%%time:~3,2%%time:~6,2%.log"
这里的%date:~-4,4%提取年份,%date:~-10,2%提取月份,以此类推;如果时间中存在空格,可以用%time: =0%替换为0,避免文件名出现空格问题。
内容的提问来源于stack exchange,提问作者ellen

