使用 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 代码