根据日历自动放置 autosys 作业 ON_ICE

Put an autosys job ON_ICE automatically depending on a calendar

我正在使用每晚 运行s 的 autosys 作业路径。

其中一项工作需要 运行 仅在每个月初的特定日期(通常是前 4 天,但可能会因业务而异)所以目前我将上述工作 ON_ICE 或 OFF_ICE 手动,我希望将其自动化。

我目前有 2 个想法,但我无法选择任何一种方式。

选项 1(最干净?)

我会在 daily_job 和 monthly_job 之间创建一个新工作,假设叫做 calendar_check。 这项工作将在我的应用程序服务器上启动一个批处理,检查日历所在的我的应用程序的数据库,并根据数据库检查发送回 autosys 好的命令以启动下一个工作或 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 日历和 运行s 仅在日历日期放置 monthly_job OFF_ICE。 缺点是我必须在 autosys 中维护另一个日历,但它很小。

但是我还是不知道 jil 要求一份工作将另一份工作搁置或搁置的语法。

为清楚起见,再次显示小图

欢迎任何帮助或关于我如何实现它的任何其他想法。 谢谢!

要在 Autosys 中执行 sendevent 命令,必须安装 autosys cli 程序包要声明的局部变量,然后登录到特定的实例

这可以由调度 Admin/Middleware 团队验证(如果有的话)。

如果月初运行的日子是固定的,比如前5天或前5个工作日,扩展日历可以考虑

替代方式: 由于 run/hold 作业的条件基于数据库中 SQL 查询的输出,我们将使用用户定义的退出代码,每月作业将基于该代码触发。

第 1 步:制作一个脚本来获取 SQL 查询输出,并基于它我们可以定义用户退出代码。

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

一般如果job exit code > than 0,就会触发作业失败的告警,如果需要抑制这个,给这个job添加如下属性:

max_exit_success:1

现在如果出口为 0 或 1,作业将被标记为成功。 考虑到作业的名称是 Job_Cal_Check 并且每天定义为 运行.

第 2 步: 每月 job/box 没有日历,只有在 Job_Cal_Check 作业有出口 1 时才会触发。添加以下属性

condition: exitcode (Job_Cal_Check) = 1

编辑:修复连续作业的错误 运行

创建一个休眠 x 秒的中间作业,计算这个时间 +-2 或 3 秒,每月作业在 Job_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 将具有 Activated/In Running/Completed,完成后,作业流程将继续。

希望这对您有所帮助,如果还有什么需要尽管问。