我有一个3个作业的Ctrl-M工作流程,应该每15分钟运行一次,如下所示:
作业1 - >作业2 - > JOB3
时间表是上午9点到11点,每15分钟一次。
Control-M版本V9。
业务规则:Job1启动。 Job1成功完成后,Job2必须启动。一旦Job2成功完成,Job3就必须启动。
因此,我所做的是每15分钟定义一次Job1循环,并创建一个输出条件“job1-OK”,这是Job2的前提条件,从Job2到Job3也是如此。
我发现如果你没有将Job2和Job3定义为循环,那么它们在第一次执行后永远不会被踢掉。你认识这些家伙为什么?我为解决这个问题所做的是每15分钟设置一次Job2和Job3循环,但是这使我的“工作流程”< Job1 - > Job2 - > Job3>因为在我的父Job1完成之前评估了Job2的15分钟条件,所以如果Job1“cycle”与Job2循环不同步,则Job2永远不会运行。你懂我的意思吗?
示例:Job1在1分钟内运行,Job1-OK out条件被释放,Job2被启动,同样从Job2到Job3。 Job1现在正在等待接下来的15分钟周期,周期被命中,它会运行并需要20分钟运行:并行,Job2正在等待15分钟周期+ Job1的输出条件:一旦15分钟周期job2被命中,Job1的前提条件被评估,返回false(因为Job1仍在运行),Job2进入等待状态,持续下一个15分钟循环+ Job1-OK输出运行Job2所需的条件。 Job1在18分钟内完成并释放“Job1-OK”状态但是Job2没有启动,因为下一个循环将在接下来的12分钟内发生,因为Job1需要18分钟才能运行。因此,Job2执行在此循环中丢失。
我基本上希望Job1在Job1完成后立即运行,无论是时间表,时间,周期还是其他任何事情。有可能完成这样的任务吗?否则,如何在周期和前置条件检查之间不重叠的情况下满足此要求?
非常感谢,我希望我能正确解释自己!
答案 0 :(得分:1)
要定义循环流,所有作业确实必须是循环的。 对于您的场景,我建议将Job1设置为15分钟循环,Job 2和Job 3都可以设置为1分钟循环。只要您在成功完成工作后删除条件,那么此流程将完美运行。
您的替代解决方案确实有效,但在许可方面成本非常高。 Control-M根据订购的作业数量获得许可。因此,如果您定义一个流程,那么在为大额账单准备额外工作时无限订购!
答案 1 :(得分:0)
经过长时间的研究,发现了它:
替代方案:没有循环工作的一个很好的选择是在启动子工作的条件后立即“动态”订购子工作“实现:这种方式没有必要创造大量的条件,只需要在父母被踢开的时候订购工作!!此外,为了支持具有多个场景的复杂工作流,您可以创建一些虚拟作业来检查将被循环评估的前置条件,例如每1分钟。