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

问题描述 投票:0回答:4

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

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

python mainframe jcl
4个回答
2
投票

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

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

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不是企业作业调度程序。)

好的,也就是说,如果您仍然要以这种方式继续执行此(可能是不明智的)路径,那么以下是一些其他选项,但顺序没有特定:

  1. 配置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

由于功能强大,因此请确保采取合理,适当的步骤来确保此作业提交路径的安全。

  1. 使用IBM的z / OS Connect Enterprise Edition软件产品来安装z / OS,创建所需的REST API(既简单又强大),然后从Python调用它们。有关z / OS Connect EE的更多信息,请参见:

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

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

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

我在此列表中提供的至少一些选择可以与MQ结合使用,MQ提供有保证的消息传递-如果您要使所有这些都可靠地运行,这将非常有用。

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

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

如果单击示例,您将找到一些Python示例代码。

...。还有许多其他可能的方法,因此,如果由于某些原因您不喜欢这些选择中的任何一种,请发表后续报告。


0
投票

[不知道更多,这个问题就不可能回答。

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

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


0
投票

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


0
投票

Cschneid有另一个合理的答案:Dovetailed的Co:Z工具包(“ z / OS混合批处理”)。以下是一些可能性,按特定顺序排列:

  1. z / OS客户端Web启用工具包,基本z / OS操作系统中包含的IBM支持的功能。该工具包允许您从z / OS上的几乎任何程序调用REST API。可在此处获得COBOL示例:

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

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

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

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

  1. 根据IETF RFC 1831和1832进行的远程过程调用(RPC)。如果将带有COBOL程序的RPC使用,则将调用C接口,这是一小部分混合语言编程。
© www.soinside.com 2019 - 2024. All rights reserved.