【问题标题】:Timeout including time in queue JCL Z os IBM超时,包括队列中的时间 JCL Z os IBM
【发布时间】:2021-11-21 18:44:43
【问题描述】:

我需要在通过 bpxbtach 调用 Unix 脚本的 JCL 步骤中设置超时。我做到了

//STEPX EXEC PGM=BPXBATCH, PARM='sh /x.sh',TIME=(,10)

但是,经过一段时间后,我意识到不包括队列中的时间。他们说“此运行时间仅指实际执行时间,不包括作业在 INPUT 或 INPUT HOLD 队列中花费的时间”https://supportline.microfocus.com/documentation/books/rd60/cbwjto.htm

那是 microfocus JCL,但我验证了这种行为在 IBM Z 上也是如此。

因此,即使我将超时设置为 10 秒,如果队列正在处理其他事情,该步骤也可能需要几分钟。我需要一个超时来终止这一步,不管它花了这么长时间的原因。我一直找不到我需要的东西。请帮忙。

【问题讨论】:

  • 你为什么要这样做?根据定义,作业是批处理工作。如果您需要在 10 秒内完成某件事,则需要采取其他步骤。您还将工作步骤和工作混为一谈。我建议问一个描述你是什么的问题
  • 我认为这是一个 'XY' 问题 - 当你真正需要解决问题 'Y' 时,你正在尝试解决问题 'X' 在大型机上的 30 多年中,我从未见过如果批处理作业在运行后 10 秒内未运行,则要求取消它。批处理作业在此程度上不依赖于时间。现在您可能需要在某个事件发生后的 10 秒内运行脚本,所以我会询问您的系统程序员是否有像 Ops/MVS、AF/Operator 或 IBM 的 System Automation 这样的自动化包。
  • 10 秒,那行代码只是为了举例......

标签: mainframe zos jcl


【解决方案1】:

z/OS 批处理确实不是时间关键型工作的最佳选择。如您所见,JCL“TIME”参数与 CPU 时间消耗有关,而不是经过时间控制。如果这是一个业务关键需求,那么一定要与您的 z/OS 管理员联系 - 他们当然可以配置您的系统,以便您的工作很可能会立即运行,但这通常不是默认行为。

您没有提供很多关于您的工作可能还在做什么以及如何提交的详细信息。如果您能够控制提交作业的方式,一种选择可能是直接生成您的 shell 脚本,而不是提交批处理来运行您的脚本。

例如,您所描述的是提交生成 BPXBATCH 的 JCL,然后 BPXBATCH 生成您的 shell 脚本。相反,您可以编写一个简单的 C 程序,该程序只需调用“spawn()”来将 shell 作为不同的 UNIX 进程运行——这并不难,具体取决于您提交共享的 JCL 的方式。您不再需要批处理作业 - 只需直接运行脚本即可。

如果您在 TSO 环境中运行,OSHELL 命令可让您以交互方式运行脚本。您甚至可以使用简单的 REXX 脚本自动执行整个过程,而这一切都不需要通过批处理启动器。

如果您的站点运行 SSH 或类似的,您可能会考虑通过 SSH 命令启动您的脚本 - 这甚至可以跨网络运行。 SSH 允许您启动一个 shell 会话并传递一个命令以供执行……同样,这里没有 JCL 或输入队列。

如果您的管理员允许,另一种选择是通过“START”命令运行您的 JCL。与批处理 JCL 不同,当遇到 START 命令时,您开始的工作会立即运行 - 已启动任务没有输入队列。启动命令也可以从 JCL 发出,因为它们是在扫描 JCL 时发出的,而不是在作业开始时发出的,所以这些也是相当直接的。

在您的 shell 脚本中,设置已用时间限制非常容易 - 有示例 here

【讨论】:

  • 感谢您的彻底回复,我相信正确的答案是不将 JCL 用于时间紧迫的任务,但是,在这种情况下和其他一些情况下,几乎出于政治原因,它需要 JCL 而 bpxbatch 是唯一可以与unix通信的东西,oshell不能启动更不用说ssh了。凭借我的特权,START 似乎奏效了。谢谢
【解决方案2】:

我在您的代码中发现了一些问题...

//STEPX EXEC PGM=BPXBATCH, PARM='sh /x.sh',TIME=(,10)

首先,BPXBATCH,PARM= 之间有一个空格,它不会执行您的 shell 脚本,并可能导致 JCL 错误。

其次,您正在使用 EXEC 语句的 TIME 参数,该参数限制 CPU 时间,但您希望取消作业步骤,如果它等待超过一定时间输入队列,这是一个时钟时间限制。

无法通过基于时钟时间的 JCL 参数从作业本身取消作业,包括或不包括在输入队列中花费的时间。

如果您确实需要这样做,我建议您查看您商店的作业调度程序包的功能。您可能需要重新检查为什么如果在您提交作业后 10 秒内没有完成作业,您需要取消它。

【讨论】:

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