我们有一个Autosys工作(我们称之为job_a),它具有3am时间依赖性,并且还应该等待成功完成大型机作业(job_m,在我们的情况下总是成功)。 Job_m通过主机上的OPC调度程序运行,该调度程序将作业完成传递给Autosys。它可以在凌晨2点到早上6点之间的任何时间运行。
我对Autosys如何工作的理解是,当job_m完成时,它会在其数据库中的表中写入一个条目,当job_a检查其依赖关系时,它会查看此表以查看job_m的状态。此状态不会自动清除。因此,在第一次成功运行job_m之后,将始终满足作业依赖性,即使我们只对同一天的job_m运行感兴趣。
Day 1 4am: job_m completes Day 1 4:01am: job_a runs, since Day 1 4am run of job_m was successful Day 2 3am: job_a runs, since Day 1 4am run of job_m was successful Day 2 5am: job_m completes
我们目前提出的解决方法是让作业(job_c)定期检查表格,并且只有在最近6小时内更改了job_m的状态时才会完成。
Day 1 3am: job_c starts, sees no status change for job_m within the last 6 hours Day 1 4am: job_m completes Day 1 4:01am: job_c completes Day 1 4:02am: job_a runs following completion of job_c Day 2 3am: job_c starts, sees no status change for job_m within the last 6 hours Day 2 5am: job_m completes Day 2 5:01am: job_c completes Day 2 5:02am: job_a runs following completion of job_c
是否有可用于重置表中job_m状态的Autosys命令?如果没有,是否有比上述概述更好的强制执行此依赖的方法?
答案 0 :(得分:2)
解决方案取决于您使用的Autosys版本。如果它是最新版本的R11,你可以设置回看job_a的依赖关系,只有在job_c在X小时内运行到S时才会运行。
在早期版本中,您可以在job_a的S上运行一个作业,该作业将job_c的状态更改为INACTIVE。如果job_c处于非活动状态,则job_a将启动条件视为FALSE,但job_c将在下次满足其启动条件时运行。
该命令是sendevent -E CHANGE_STATUS -s INACTIVE -J job_c。此命令必须作为Autosys超级用户帐户运行。您的Autosys管理员可能不允许这样做。最佳做法是在Autosys事件处理器服务器上运行sendevent命令,以便在运行双服务器高可用性并且系统转到单服务器模式时,sendevent命令在翻转后工作。
实施例
insert_job: job_a job_type: c
command: do_something
machine: machine1
owner: my_id@machine1
conditions: s(job_c)
date_condition: 1
start_time: 03:00
insert_job: job_c job_type: c
command: do_something_else
machine: machine1
owner: mainframe@machine1
comment: "This is the mainframe job"
insert_job: job_d job_type: c
command: sendevent -E CHANGE_STATUS -s INACTIVE -J job_c
owner: superuser@autosys_server
machine: autosys_server
conditions: s(job_a) and s(job_c)