Autosys中Restart Box执行force-run后子Box无法直接运行求助
针对你遇到的嵌套Box在force-run时因start_times限制无法直接进入RUNNING的问题,以下是几个无需拆分作业到单个层级、也不需要sendevent权限的可行方案:
方案1:启用调度器的「强制运行跳过时间检查」属性
多数企业级作业调度工具(如Autosys、Control-M)都提供了专门的配置项,允许在force-run父Box时忽略子Box的start_times约束。以Autosys为例,你可以给Stop Box和Start Box添加skip_sched_time_check_for_force_run: y属性:
BOX: STOP_BOX start_times: "23:30" skip_sched_time_check_for_force_run: y JOB: STOP_THIS_JOB ... JOB: STOP_THAT_JOB ... BOX: START_BOX start_times: "5:00" skip_sched_time_check_for_force_run: y JOB: START_THIS_JOB ... JOB: START_THAT_JOB ...
配置后,当你force-runRestart Box时,子Box会直接跳过时间检查进入RUNNING状态,同时保留原有定时触发的逻辑。
方案2:给start_times添加条件判断逻辑
将子Box的start_times设置为双重条件:既保留原定时规则,又允许父Box被强制触发时直接运行。以Autosys的语法为例:
BOX: STOP_BOX start_times: "23:30, IF $RESTART_BOX.FORCED_RUN THEN *" ... BOX: START_BOX start_times: "5:00, IF $RESTART_BOX.FORCED_RUN THEN *" ...
这里的$RESTART_BOX.FORCED_RUN是调度器内置的变量,用于标识父Box是否是被force-run触发。当该变量为真时,*表示忽略时间限制直接运行;否则遵循原start_times规则。
方案3:重构Restart Box的触发逻辑
移除Restart Box本身的start_times,单独创建一个定时触发作业来启动它(实现原23:30的自动重启逻辑)。此时Restart Box作为纯逻辑容器,不带任何时间约束:
JOB: TRIGGER_RESTART start_times: "23:30" command: "sendevent -E STARTJOB -J RESTART_BOX" BOX: RESTART_BOX # 移除start_times配置 BOX: STOP_BOX start_times: "23:30" ... BOX: START_BOX start_times: "5:00" ...
这种情况下,平时由TRIGGER_RESTART定时启动Restart Box,子Box会遵循自身start_times;当你需要强制重启时,直接force-runRestart Box,由于父Box无时间限制,调度器会跳过子Box的start_times检查,直接触发其进入RUNNING状态。
内容的提问来源于stack exchange,提问作者Bleach

