【问题标题】:JCL job dependency without scheduler没有调度程序的 JCL 作业依赖
【发布时间】:2011-06-30 23:53:27
【问题描述】:

我正在尝试在 JES2 环境中实现一个 JCL,它会启动一组包含依赖项的作业,例如:

JOB_A  -> JOB_B   ) 
JOB_C  -> JOB_D   ) -> JOB_E

也就是说,JOB_E 仅在 JOB_B 和 JOB_D 完成时才启动。

我可以通过 JOB_A 和 JOB_C 中的作业内部读取器启动 JOB_B 和 JOB_D,但我不能不为 JOB_E 创建依赖项。

我试图探索 JCL 资源锁,以便我可以在 JOB_B 和 JOB_D 中锁定 JOB_E 需要的数据集,以便 JOB_E 仅在所有数据集可用但 JCL 仅请求 STEP 级别的数据集并释放它们时才会启动然后。如果 JCL 可以在开始之前请求所有数据集,我可以在 JOB 中实现某种互斥锁,例如:

 JOB_A locks data set DSN_A
 JOB_B waits to get data set DSN_A
 JOB_C locks data set DSN_C
 JOB_D waits to get data set DSN_C
 JOB_E waits to get data set DSN_A and DSN_C

如何做到这一点?

我需要这个来在开发环境中测试一组 JCL,而无需访问调度程序。

【问题讨论】:

    标签: mainframe jcl


    【解决方案1】:

    您评论说您需要在开发环境中测试 而无需访问调度程序,这让我想知道您的商店是否有生产环境的调度程序。如果是这样,那么您的测试将不会真正测试将在您的生产环境中使用的内容。如果您还没有,请考虑一下。

    在回答您的问题时,一种技术是在一个作业的最后一步使用 IEBGENER 等实用程序来提交后续作业。

    例如,JOB_A 的最后一步将执行 IEBGENER,其中 SYSUT1 包含 JOB_B 的执行 JCL,SYSUT2 指向 INTRDR。这是您可以使用的一种技术,但让 JOB_E 运行以使其不干扰任何其他作业可能会很棘手,因为 JOB_E 需要在 JOB_B 和 JOB_D 都完成后运行。

    另一种技术是在batch 模式下使用Rexx 使用内部阅读器提交您的作业,然后使用SDSF Rexx interface 观察它们何时完成。从本质上讲,您将编写一个专用于您的作业集的专用作业调度程序。

    十年后更新……

    从 z/OS 2.2 开始,IBM 添加了 JES2 Execution Control Statements,它“定义了一组作业和作业本身的执行顺序”。在使用此功能之前,必须由您的 z/OS 系统程序员完成一些配置。

    【讨论】:

    • 我已经走那条路了。我想我会尝试一些 Rexx 脚本来实现某种 JCL_WAIT(JOB_B, JOB_D) :P
    【解决方案2】:

    我想知道为什么要投入宝贵的时间来测试一组作业,其中 PROD 集完全不同,将由一些 xyz 调度程序处理。别介意,如果我听起来很疯狂,但我也提出我的建议:

    假设:您的作业占用可管理的 CPU,无需并行运行。

    A 触发 B 触发 C 触发 D 触发 E(我知道它不值得但 你的测试很顺利)我只是把它 在这里思考如果我会做什么 你是吗?我主要需要我的测试 走得又快又好。让我知道你的陈词滥调。

    现在,感谢你们两位的解决方案,我们可以通过 REXX 管理作业的提交,这也创建了一个虚拟和主观的调度。

    【讨论】:

    • 目的不是测试调度本身,而是测试 JCL 中的软件,所以我不需要调度器本身,它只是一种在jcl/程序中的jcl。该测试还帮助我检查数据集名称是否正确,以及在创建数据集之前删除它们。您的假设是正确的,我可以做更简单的清洁方法。它只是没有涵盖我可能犯错误并在 JOB_B 和 JOB_D 中使用相同数据集的测试。同时,我将尝试制作 Rexx 脚本,谢谢你们俩
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多