根据日历,自动将自动系统作业ON_ICE化。

问题描述 投票:0回答:1

我正在处理一个每天晚上运行的autosys上的工作路径。

其中一个工作需要在每个月月初的特定日期运行(通常是前4天,但它可以根据业务的变化而改变),所以目前我把所述工作ON_ICE或OFF_ICE手动,我正在寻找自动化。

我目前有2个想法,但我无论选择哪种方式都会卡住。

方案1(最简单的?

我会在daily_job和monthly_job之间创建一个新的job,叫做calendar_check.这个job会在我的app serveur上启动一个批处理,检查我的app的数据库中的日历,并根据数据库检查的结果向autosys发送返回好的命令,以将下一个job ON_ICE或OFF_ICE。

我的批次看起来像这样

%My_SQLPATH% -S %My_SQL_SERVER% -d %My_SQL_DB -h-1 -W -Q "SQL Query that returns 1 or 0 depending on the calendar in my application" output.txt
set /P bEndMonth= < output.txt
echo %bEndMonth%
del output.txt
IF %bEndMonth% == 0 (start "somthing i don't know what 'sendevent -j ON_ICE -e monthly_job'") ELSE (start "somthing i don't know what 'sendevent -e OFF_ICE -j monthly_job'")

最后那行是我不知道怎么写的,也不知道能不能回到我的autosys服务器,用sendevent命令。

为了清楚起见,画了个小图enter image description here

方案2(比较乱,但可能比较容易)。

我创建了2个新的工作,其中一个在我的工作路径上,每天都把monthly_job ON_ICE.另一个不在我的工作路径上,它读取一个autosys日历,并且只在日历上的日期运行。另一个,不在我的工作路径上,读取一个autosys日历,并只在日历日期运行,把每月_job OFF_ICE.Downside是我必须在autosys中维护另一个日历,但这是小事。

但我又不知道jil要求一个job把另一个job放在冰上或冰下的语法。

为了清楚起见,再来一张小图option 2 diagram

欢迎任何帮助或任何其他想法,我可以实现这一点.Thank you !

batch-file scheduled-tasks autosys
1个回答
1
投票

对于执行 sendevent 在Autosys中的命令,即 autosys cli软件包 必须安装。局部变量 要声明的,然后登录到特定的 实例.

如果有的话,可以由调度管理中间件团队进行验证。

如果月初的运行天数是固定的,比如前5天或前5个工作日。延长的日历 可以考虑。

另一种方式:由于运行保持作业的条件是基于数据库中SQL查询的输出,所以我们将使用用户定义的退出代码,根据这个代码来触发月度作业。

步骤1:制作一个脚本,获取SQL查询的输出,根据它我们可以定义用户的退出代码。

LOGIN Database;
EXEC SQL Query;
IF %bEndMonth% == 0
    THEN exit 0;
ELSE 
    exit 1;

一般来说,如果作业退出代码是>大于0,就会触发作业失败的警报,如果需要抑制这个,就给这个作业添加以下属性。

max_exit_success:1

考虑到作业的名称是Job_Cal_Check,并且定义为每天运行,现在该作业将被标记为成功。

步骤2:月度作业框将没有日历,只有当Job_Cal_Check作业的出口为1时才会触发。添加以下属性

condition: exitcode (Job_Cal_Check) = 1

编辑。修正连续作业的错误运行

创建一个中间作业睡眠x秒,计算这个时间+-2或3秒,月作业完成后开始作业_Cal_Check。

作业流程应该是

Non Monthly Job
Previous Chain -> Job_Cal_Check -> Sleep_Job -> Followup_Jobs *(would wait only for Sleep_Job as the Monthly job would have completed status from the previous run)*

Monthly Job
Previous Chain -> Job_Cal_Check -> Sleep_Job + Monthly_Job *(both these jobs would we activated simultaneously)* -> Followup_Jobs *(would wait for both the jobs to complete)*

作业属性如下:

Sleep_Job:
condition: success (Job_Cal_Check)

Followup_Jobs
condition: success (Sleep_Job) AND success(Monthly_Job)

在非月度作业的日子里,Followup_Jobs将只等待Sleep_Job完成。

在月度作业的日子里,Followup_Jobs会先等待Sleep_Job完成,这时Montlhy_Job会有ActivatedIn RunningCompleted,完成后,作业流程会继续。

希望对大家有所帮助,如果还有什么需要请教的。

© www.soinside.com 2019 - 2024. All rights reserved.