如何创建Autosys中检测JobA运行状态的jobA_check临时作业?
Autosys 作业超时检测临时方案可行性说明
该方案完全可实现,是Autosys调度场景中,针对暂无法根因修复的长作业偶发超时问题的常用临时规避方案。
核心逻辑验证
你设计的「JobA与检测作业同步启动、轮询状态匹配超时规则返回对应状态」的逻辑完全符合Autosys的调度规则,不存在逻辑冲突,可直接落地。
具体实现步骤
- 第一步:配置两个作业的同步触发规则
可以选择两种方案保证作业同步启动:- 方案1:将JobA和jobA_check的启动触发条件(如上游依赖、启动时间点)配置为完全一致
- 方案2:给jobA_check配置触发规则为JobA进入RUNNING状态时启动,触发精度更高,不会出现时间差
- 第二步:编写jobA_check的执行脚本,核心逻辑如下:
- 脚本启动后调用Autosys原生命令
autorep -J JobA -w获取JobA的当前运行状态、已运行时长 - 每间隔1~2分钟轮询一次状态,直到触发以下两个终止条件之一:
- 若查询到JobA已进入结束状态(SUCCESS/FAILURE/TERMINATED等),脚本直接返回退出码
0,对应Autosys作业的SU状态 - 若统计到JobA已运行时长超过30分钟,脚本直接返回非0退出码,对应Autosys作业的FAILURE状态
- 若查询到JobA已进入结束状态(SUCCESS/FAILURE/TERMINATED等),脚本直接返回退出码
- 脚本启动后调用Autosys原生命令
- 第三步:调整下游批处理的依赖规则
把原来下游作业仅依赖JobA SU的配置,调整为同时依赖JobA SU + jobA_check SU,只要JobA超时导致jobA_check失败,下游作业就不会触发,直接阻断超时后异常跑批的风险。
可选优化项
如果需要进一步降低风险,可以给方案加两个兜底配置:
- jobA_check自身配置最大运行时长为31分钟,避免脚本异常卡死产生僵尸作业
- 如果超时后需要自动清理异常JobA,可以在jobA_check返回非0退出码前,执行
sendevent -E KILLJOB -J JobA命令直接终止超时的JobA,释放服务器资源 - 脚本内增加
autorep命令调用失败的兜底逻辑,连续3次拿不到JobA状态时直接告警并返回异常,避免漏检
内容的提问来源于stack exchange,提问作者Mariusz Chw
相关产品推荐
相关产品推荐

