超时,包括队列中的时间 JCL Z os IBM

Sam*_*uel 0 mainframe jcl zos

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

//STEPX EXEC PGM=BPXBATCH, PARM='sh /x.sh',TIME=(,10)
Run Code Online (Sandbox Code Playgroud)

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

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

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

Val*_*e R 6

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 脚本中,设置经过的时间限制非常容易 -这里有示例。