如何从 z/OS 调用远程服务器上的 python 脚本?

Posted

技术标签:

【中文标题】如何从 z/OS 调用远程服务器上的 python 脚本?【英文标题】:How can I call python scripts on a remote server from z/OS? 【发布时间】:2019-10-07 17:35:49 【问题描述】:

作为将批处理作业(并使用 EXEC PGM)迁移到其他语言(此处为 python)的一部分,面临跨服务器连接的挑战。

我们的目标是将一些大型机批处理作业 COBOL 程序迁移到 python。在这个过程中,一些批处理作业将使用调度程序完全控制,程序将在 python 脚本中重写。但是一些大型机程序将保持不变,暂时不会在 python 中迁移。由于我们目前的目标是部分迁移,一些大型机批处理作业需要调用云上的 python 脚本。我在这里面临挑战,如何从大型机批处理作业中调用 python 脚本。

【问题讨论】:

你试过什么?你做了什么研究?您使用的云主机有哪些能力?事实上,这是无法回答的。 我在寻找一些解决方案,发现使用 REXEC 调用远程脚本。但是还没有尝试过,因为不确定我是否是正确的路径。云中需要哪些功能才能成功连接,请建议。谢谢! 为什么不在大型机上直接运行 Python 脚本? @cschneid:我们正在从 z/os 迁移到云。 你的 python 脚本在哪里?在大型机内还是在大型机外? 【参考方案1】:

我在此答案中假设 COBOL 应用程序在您大型机上的 z/OS 操作系统上运行,但如果该假设不正确,请发布后续信息。

Cschneid 有一个很好的答案:只需在您的大型机上运行 Python 脚本。可从 Rocket Software 免费下载 Python for z/OS:

https://www.rocketsoftware.com/zos-open-source

如果您愿意,可以选择从 Rocket Software 购买 z/OS 上的 Python 支持。 (IBM Z 机器的所有 Linux 发行版还包括 Python,通常由 Linux 发行商支持。)在 IBM Z 上运行的 Python 可以直接在基于 IBM Z 的数据存储/数据库上运行,包括受到良好保护的 z/OS 加密数据集。您可以非常轻松地创建和管理混合云架构,其中包括跨所有操作系统的 IBM Z 资源。这将是最好的安排,否则您可能会遇到运营和管理问题。例如,您不必走得太远就能找到现实世界中遭受重大、对业务影响巨大的批处理调度问题的组织实例,这些问题完全破坏了他们的支付流程。 (与此相关,Python 不是企业作业调度程序。)

好吧,就是说,如果你仍然要沿着这条(可能是不明智的)这条路继续前进,那么这里有一些其他的选择,没有特别的顺序:

    配置 z/OS 管理工具(包括在 z/OS 中作为基础、包含、支持的功能),并使用其授权的 REST API 提交作业。此处提供了详细信息(假定为 z/OS 2.4,但此功能在所有当前支持的 z/OS 版本甚至更早版本中都可用):

https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.4.0/com.ibm.zos.v2r4.izua700/IZUHPINFO_API_RESTJOBS.htm

确保您采取合理、适当的步骤来保护此作业提交路径,因为它非常强大。

    为您的 z/OS 安装配备 IBM 的 z/OS Connect Enterprise Edition 软件产品,创建您需要的 REST API(既简单又强大),并从 Python 调用它们。有关 z/OS Connect EE 的更多信息,请点击此处:

https://www.ibm.com/us-en/marketplace/connect-enterprise-edition

    如果您有 MQ for z/OS,则使用 MQ 客户端,从 Python 向 z/OS 上适当配置的 MQ 队列发送适当格式的 MQ 消息,然后以这种方式调用/触发您的程序。 (对于 Advanced Message Security,建议使用 MQ Advanced for z/OS。)当连接到所有当前 IBM 支持的 MQ 和 MQ Advanced for z/OS 的许可版本时,MQ 客户端可以无限制地免费使用。最近发布的 MQ 和 MQ Advanced for z/OS 还支持 REST API(和 JSON 有效负载),因此您现在可以采用这种方式格式化您的消息。 MQ 客户端可在此处下载:

https://developer.ibm.com/messaging/mq-downloads/

至少我在此列表中提供的一些选择可以与 MQ 结合使用,MQ 提供可靠的消息传递——如果您试图使这一切稳健运行,这将非常有帮助。

    去找出您的大型机安装的企业作业调度程序(它可能有一个),并使用其授权的 API 来调度和运行程序。例如,IBM Z Workload Scheduler 提供授权的 REST API。有关介绍,请参阅此文档:

https://www.ibm.com/support/knowledgecenter/en/s-s-rULV_9.5.0/com.ibm.tivoli.itws.doc_9.5/common/src_dgd/awsddrestapi.htm

如果您点击进入示例,您会发现一些 Python 示例代码。

....还有很多其他可能的方法,所以如果由于某种原因您不喜欢这些选择中的任何一个,请发布后续内容。

【讨论】:

感谢@Timothy 的详细回答。但是所有选项都是从 Python 调用 z/OS 上的 Cobol 程序。我的要求是从 z/OS 上的批处理作业中调用 Python 脚本。请让我知道是否有任何令人困惑的问题让您产生相反的想法。【参考方案2】:

Cschneid 有另一个合理的答案:Dovetailed 的 Co:Z Toolkit(“z/OS Hybrid Batch”)。以下是更多可能性,排名不分先后:

    z/OS Client Web Enablement Toolkit,一个包含在基本 z/OS 操作系统中的 IBM 支持的特性。该工具包允许您从 z/OS 上的几乎任何程序调用 REST API。此处提供了 COBOL 示例:

https://github.com/IBM/zOS-Client-Web-Enablement-Toolkit

    z/OS Connect Enterprise Edition,它是双向的。

    通常在 z/OS 上安装和托管的企业作业调度程序通常可以触发和管理其他系统上的“远程”任务。 IBM Z Workload Scheduler(例如)当然可以,这里有一整本讨论该主题的手册:

https://www.ibm.com/support/knowledgecenter/s-s-rULV_9.5.0/com.ibm.tivoli.itws.doc_9.5/eqqlwmst.pdf

    远程过程调用 (RPC),根据 IETF RFC 1831 和 1832。如果您将 COBOL 程序与 RPC 一起使用,您将调用 C 接口,这是混合语言编程的一小部分。

【讨论】:

感谢@Timothy 提供了许多可能的选项,这些选项肯定会帮助我在更广泛的层面上进行尝试。【参考方案3】:

Dovetailed Technologies hybrid batch 是另一种产品,它允许您将驻留在远程服务器上的代码作为批处理作业中的步骤执行,类似于@TimothySipples 和@KevinMcKenzie 发布的答案中的解决方案。

【讨论】:

谢谢@cschneid。混合批处理在这里当然看起来不错。【参考方案4】:

如果不了解更多,这个问题是无法回答的。

但是,一般来说,您可以使用bpxbatch 批量发出 USS 命令。因此,您可以从Rocket Software 安装 curl 或 wget 之类的东西,然后通过 REST API 或云端类似的东西(内置于 Django 或 Flask)调用 python。如果你真的想做一些可怕的事情,你可以编写一个 ssh 到云系统的 shell 脚本,然后在远程系统上发出命令。

但是,我意识到您可能对此没有太多发言权,我也会指出 Timothy Sipples 的回答,并说这不是一个好主意,而且会很脆弱。您将需要多个这样的脚本,因为您需要提交工作,然后稍后再回来获取结果,并根据结果做出适当的行为。您将不得不在这些批处理作业/shell 脚本中构建各种错误处理功能。

【讨论】:

是的@Kevin,我目前不确定我们将要使用的整个方法,因为我们首先在进行一些具体步骤之前探索相同方法的可行性。因为这会影响现有的批处理。但可以肯定的是,提供的所有选项都让 Ray 有希望朝着这个方向前进,显然需要谨慎。

以上是关于如何从 z/OS 调用远程服务器上的 python 脚本?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 Java Web 应用在 IBM z OS 中提交 JCL?

IBM z/os 上的 teradata xml 服务

从 IBM Z/OS 获取日志

如何使用 Python 与 z/OS 服务交互以自动化手动流程 [关闭]

从 z/OS 上的 C 语言可执行文件中删除符号信息

PL/I 程序中的 z/OS MVS 和 z/OS UNIX 互操作?