BPXBATCH 声明条件代码 0,但触摸请求无效

问题描述

我正在提交一个 JCL 请求以创建一个文件,以表明某个特定的 JCL 作业是否成功完成。这是必要的,因为我们只能通过 SSH 访问作业状态。系统报告条件码0,但文件没有被“触摸”。

JCL:

//WOODSMNX JOB (1111),MSGLEVEL=(1,1),CLASS=A,MSGCLASS=H,//  USER=WOODSMN,REGION=0M
/*JOBPARM S=CLA
//**********************************
//*  CREATE SUCCESS INDICATOR FILE *
//**********************************
//SUCCIND EXEC pgm=BPXBATCH
//STDERR DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDPARM DD *
SH 
 touch /tmp/SSC.D051721.T200335.S90.CP037.DONE.SUCCESS
/*
//

作业实际上存储在一个 ZFS 文件中,并通过 Unix 系统服务通过 ssh 提交。但是,我尝试通过 ispf 提交此 JCL,唯一的区别是它存储在 RECFM=FB,LRECL=80 PDS 中。为什么它会给我一种错误的成功感?

解决方法

从之前关于并行 shell 会话的讨论中,我仍然相信您正在研究多系统综合系统,不是吗?请注意,每个系统都有自己的 /tmp。因此,如果作业在系统 A 上运行并且您登录到系统 B,您将看不到“touched”文件。

同样从之前的讨论来看,我相信您的综合系统没有与共享的 UNIX 文件系统一起运行。您应该确保对 UNIX 文件和目录的所有访问始终在同一个系统中完成。

还有一点需要考虑:/tmp 可能是一个临时文件系统(即仅主存储器 (RAM))。 IPL 后所有内容都将丢失。如果在您的作业运行和您检查已创建哪个文件来表示作业结果之间存在 IPL,您将迷失方向。这两个文件都找不到。最好选择一个永久存储数据的位置,例如/var/jobname/result

,

您可能需要转到 the documentation 并向下滚动到标题为“设置返回代码的一般规则”的部分,看看添加 set -o errexit 是否会得到您想要的结果。