【问题标题】:Control-M: cyclic children jobsControl-M:循环子作业
【发布时间】:2017-12-04 14:29:13
【问题描述】:

我有 3 个作业的 Ctrl-M 工作流程,应该每 15 分钟运行一次,如下所示:

Job1-->Job2-->Job3.

时间表是从上午 9 点到上午 11 点,每 15 分钟循环一次。

Control-M 版本 V9。

业务规则:Job1 启动。一旦 Job1 成功完成,Job2 就必须启动。一旦 Job2 成功完成,Job3 就必须启动。

因此,我所做的是定义 Job1 每 15 分钟循环一次,并创建一个输出条件“job1-OK”,这是 Job2 的先决条件,从 Job2 到 Job3 也是如此。

我发现,如果您不将 Job2 和 Job3 也定义为循环的,那么它们在第一次执行后就永远不会再次被踢出。你们知道为什么吗?我为解决这个问题所做的就是将 Job2 和 Job3 也设置为每 15 分钟循环一次,但这会使我的“工作流程”Job2-->Job3 > 变得混乱,因为评估了 Job2 的 15 分钟条件在我的父 Job1 完成之前,因此如果 Job1“周期”与 Job2 周期不同步,则 Job2 永远不会运行。你懂我的意思吗?

示例:Job1 在 1 分钟内运行,Job1-OK 退出条件被释放,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 执行在此循环中丢失。

我基本上希望 Job2 在 Job1 完成后立即运行,无论时间表、时间、周期或其他什么。有可能完成这样的任务吗?否则,如何在循环和前置条件检查之间不重叠的情况下满足此类要求?

非常感谢,希望我能正确解释自己!

【问题讨论】:

    标签: jobs cycle control-m


    【解决方案1】:

    要定义循环流,所有作业确实必须是循环的。 对于您的情况,我建议将 Job1 设置为 15 分钟循环,Job 2 和 Job 3 都可以设置为 1 分钟循环。只要您在成功完成作业后删除条件,那么此流程将完美运行。

    您的替代解决方案确实有效,但在许可方面成本非常高。 Control-M 是根据作业中订购的数量获得许可的。因此,如果您定义了一个流程,可以无限地订购额外的工作,请为巨额账单做好准备!

    【讨论】:

    • 欢迎来到 SO,这更像是对现有答案的评论,而不是答案本身。一旦您获得足够的声誉,您就可以评论其他人提出的问题和答案。同时,尽量回答不需要进一步澄清的问题或提出好的问题。
    【解决方案2】:

    经过长时间的研究,想通了:

    • 如果您希望所有作业多次运行,Ctrl-M 需要循环:您不能仅在一个前提条件下中继,仅在同一天运行多次
    • 控制何时必须再次启动作业的唯一方法是使用作业工作流的特定进出条件以及定量和控制资源(不超过 X 个作业同时运行时间等)

    替代方案:没有循环作业的一个很好的替代方法是“即时”订购子作业,只要满足启动子作业的条件已完成:这样就不需要创造大量的条件,只需在应该由父母开始的时候订购工作!此外,为了支持具有多种场景的复杂工作流程,您可以创建一些虚拟作业来检查也将循环评估的前提条件,例如每 1 分钟一次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多