我正在处理一个每天晚上运行的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命令。
方案2(比较乱,但可能比较容易)。
我创建了2个新的工作,其中一个在我的工作路径上,每天都把monthly_job ON_ICE.另一个不在我的工作路径上,它读取一个autosys日历,并且只在日历上的日期运行。另一个,不在我的工作路径上,读取一个autosys日历,并只在日历日期运行,把每月_job OFF_ICE.Downside是我必须在autosys中维护另一个日历,但这是小事。
但我又不知道jil要求一个job把另一个job放在冰上或冰下的语法。
欢迎任何帮助或任何其他想法,我可以实现这一点.Thank you !
对于执行 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,完成后,作业流程会继续。
希望对大家有所帮助,如果还有什么需要请教的。