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

Timeout including time in queue JCL Z os IBM

我需要在通过 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 秒,如果队列正在处理其他事情,该步骤也可能需要几分钟。无论花费这么长时间的原因,我都需要一个超时来终止该步骤。我没能找到我需要的东西。请帮忙。

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

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

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

其次,您正在使用 EXEC 语句的 TIME 参数,它限制了 CPU 时间,但您引用了取消作业的愿望如果它在输入队列中等待的时间超过一定时间,则为 clock 时间限制。

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

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

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

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

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

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

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

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

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