使用 FTP 和 C# 启动现有大型机作业

Posted

技术标签:

【中文标题】使用 FTP 和 C# 启动现有大型机作业【英文标题】:Starting an existing Mainframe job with FTP and C# 【发布时间】:2015-07-09 11:17:32 【问题描述】:

我们有很多作业(jcl)在大型机上运行。 我被要求尝试开始恢复工作。我必须使用 C# 应用程序来执行此操作。

我现在可以使用 ftp 库连接到大型机,并且可以调用大型机可以理解的原始 FTP 命令。

我有点知道如何提交 .jcl 文件,如果我使用命令“quote site filetype=jes”,它将作为作业处理。

我的问题是: - 有没有办法开始现有的工作? - 在提交作业之前我导航到哪个“目录”/分区(?)是否重要?

【问题讨论】:

您所说的“开始现有工作”是什么意思。你被要求这样做的背景是什么?用于生产?测试?发展?你在忙谁的工作?什么工作的信息是如何准确呈现给你的?和更多。简而言之,您需要给出完整的解释,包括您为什么要执行调度员或运营/生产控制/支持部门可能会执行的操作。 【参考方案1】:

您可以通过 FTP 提交以下 JCL,它将在 JOB.LIBRARY(JOB) 中运行 JCL

//JS010    EXEC  PGM=IEBGENER
//SYSUT1   DD  DSN=JOB.LIBRARY(JOB),DISP=SHR
//SYSUT2   DD  SYSOUT=(,INTRDR)
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DUMMY

【讨论】:

如果我们知道“开始现有工作”的含义,这可能是一个答案。但我们没有。我们要不要?我猜你对第二部分给出了一个隐含的答案,但如果不允许使用 INTRDR,这无论如何都会失败。我认为我们应该等待问题得到澄清后再继续。【参考方案2】:

扩展Bills cmets,这是生产、开发、测试、QA 等工作吗? 在大型机上的生产中,作业通常使用调度程序(例如Ca7 或Workload Scheduler for z/OS (formerly OPC) + 其他几个)运行。一些站点也在 QA / Development 中使用调度器,但这种情况很少见。

通过调度程序提交作业

要通过调度程序提交,您必须运营 / 生产控制 / 大型机支持部门联系。他们应该知道什么是可能的,并且有首选的方法来做这样的事情。他们还应该知道需要什么访问权限!!!

可能的选择包括:

数据集(非大型机的文件)创建时,大多数调度程序都可以选择提交作业/调度。如果可用,这可能是最容易实现的。 所有调度程序都提供可以提交调度的程序。 您或许可以运行提交相应作业的作业 在前台运行程序以提交相应的作业 如今,大多数调度程序都有 Web 界面,它们可能也有其他平台上的界面。不过,此选项可能不可用。

提交工作

如果您只是提交作业,选项包括:

将作业复制到 INTRDR,就像 @Deuian 所做的那样(前景或背景)。 运行 TSO 背景

通过工作提交(来自 Deuian 的回答):

//JOBNAME JOB ...
//JS010   EXEC PGM=IEBGENER
//SYSUT1   DD  DSN=JOB.LIBRARY(JOB),DISP=SHR
//SYSUT2   DD  SYSOUT=(,INTRDR)
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  DUMMY

最后,要在大型机上执行任何操作,您将需要适当的安全访问权限 !!!


我已尝试提供背景信息 + 可用选项的基本指南。基本上你需要和 Mainframe-Operation / Mainframe-programmers 交谈 !!!.

【讨论】:

【参考方案3】:

是的,您可以 - 只需执行 RETR 'DATASET.NAME' FTP 命令。请记住,这里的引号很重要——如果没有引号,该命令将被解释为“按 JOBID 读取假脱机文件”。加上引号,它将被解释为“提交现有的 JCL 数据集,等待作业完成并检索它的假脱机”。在提交工作之前,您导航到哪个目录并不重要。 您可以参考我通过 FTP 工作的 JES 客户端的 Java 实现 - https://github.com/vadimshchukin/jesclient。它的代码完全符合您的要求: public JESJob execute(String datasetName) throws IOException ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); retrieveFile(String.format("'%s'", datasetName), outputStream); JESJob job = new JESJob(this); job.setSpool(outputStream.toString()); return job;

【讨论】:

以上是关于使用 FTP 和 C# 启动现有大型机作业的主要内容,如果未能解决你的问题,请参考以下文章

使用 C# 到 FTP 文件到大型机,包括数据集 - 将 FTP 脚本翻译成 FtpWebRequest 代码

带有命令的 FTP 到大型机数据集

从 Windows 机器触发大型机作业

通过大型机 (zOS) 的 FTP 获取输出队列

通过 ftp 连接 Z/OS 大型机 SDSF。如何获得RC?

有没有办法在大型机上使用 python 脚本发送 ISPF 命令并获取作业统计信息?