Batch file 根据日历自动将autosys作业放置在ICE上

Batch file 根据日历自动将autosys作业放置在ICE上,batch-file,scheduled-tasks,autosys,Batch File,Scheduled Tasks,Autosys,我正在使用每天晚上运行的autosys上的作业路径 其中一项工作只需要在每个月初的特定日期运行(通常是前4天,但它可能会根据业务的不同而变化),因此,目前我正在手动将所述工作打开或关闭,并希望实现自动化 我目前有两个想法,但我选择哪种方式都被卡住了 选项1(最干净的?) 我会在每日工作和每月工作之间创建一个新工作,称为日历检查。 此作业将在我的应用服务器上启动一个批处理,检查日历所在的我的应用程序的数据库,并根据数据库检查发送回autosys的良好命令来打开或关闭下一个作业 我的那批看起来像这样

我正在使用每天晚上运行的autosys上的作业路径

其中一项工作只需要在每个月初的特定日期运行(通常是前4天,但它可能会根据业务的不同而变化),因此,目前我正在手动将所述工作打开或关闭,并希望实现自动化

我目前有两个想法,但我选择哪种方式都被卡住了

选项1(最干净的?)

我会在每日工作和每月工作之间创建一个新工作,称为日历检查。 此作业将在我的应用服务器上启动一个批处理,检查日历所在的我的应用程序的数据库,并根据数据库检查发送回autosys的良好命令来打开或关闭下一个作业

我的那批看起来像这样

%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'")
%My\u SQLPATH%-S%My\u SQL\u SERVER%-d%My\u SQL\u DB-h-1-W-Q“根据应用程序中的日历返回1或0的SQL查询”output.txt
设置/P本月=
最后一行是我不知道如何写的,或者是否有可能返回到autosys服务器并使用sendevent命令

为了清楚起见,请用一个小图表

选项2(更混乱,但可能更容易)

我创造了两个新的工作岗位。第一,在我的工作道路上,把每月的工作放在每天的冰上。 另一个,不在我的工作路径上,读取autosys日历并仅在日历日期运行,以停止每月的工作。 缺点是我必须在autosys中维护另一个日历,但这是次要的

但我也不知道jil要求一份工作将另一份工作放在冰上或冰下的句法

为了清楚起见,又用了一个小图表

欢迎您提供任何帮助或其他有关如何实现此功能的想法。 谢谢大家!

要在Autosys中执行
sendevent
命令,必须安装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
现在,如果退出为0或1,作业将被标记为成功。 考虑到该作业的名称为job_Cal__Check,并定义为每天运行

步骤2: 每月作业/框将没有日历,并且仅当作业校准检查作业有出口1时才会触发。添加以下属性

condition: exitcode (Job_Cal_Check) = 1
编辑:修复连续作业的错误运行

创建一个睡眠x秒的中间作业,计算完成作业校准检查后开始每月作业所需的时间+-2或3秒

工作流程将是:

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)
在非月度工作日, 后续作业只会等待睡眠作业完成

在每月的工作日, 后续作业将首先等待睡眠作业完成,此时Montlhy\u作业将已激活/正在运行/完成,完成后,作业流将继续


希望这能有所帮助,如果还有什么需要的话,一定要问。

如果我正确理解了这个问题,为什么不使用任务计划程序?@NekoMusume不知道如何回答你,对不起。我只是我们夜生活链中的一小部分,我刚刚为我的应用程序添加了“每月工作”,所以我一直在使用其他人使用的相同工具。你能解释一下任务调度器与autosys的工作方式有什么不同吗?对不起,我以前没有使用过autosys,但从搜索结果来看,它们看起来非常相似。如果您的系统管理员允许,您也应该签出任务计划程序,因为它内置于Windows中。@NekoMusume,所以我签出了它,不幸的是这是不可能的。我必须在此上下文中使用autosys。作业需要由外部操作员控制,并与我们业务中运行的其他应用程序作业保持一致。这看起来非常完美!明天早上我会测试这个问题,如果它有效的话,我会把它标记为已解决,但我想它会的。谢谢!所以我对这个解决方案还有一个问题。每天/每月的工作之后,有一些工作需要在其他工作结束后才开始。我怎样才能开始下一份工作?我不能把它放在每月工作的成功上,因为这样它就不会在每月不运行时启动。我不能把它放在《每日成功》上,因为它会在月初的同时开始。好吧,一点时间延迟可以帮助解决这个问题。。。让我更新答案。。。请稍后再查,非常感谢。您的解决方案解决了所有问题:)