BPXBATCH 声明条件代码 0,但触摸请求不起作用

Posted

技术标签:

【中文标题】BPXBATCH 声明条件代码 0,但触摸请求不起作用【英文标题】:BPXBATCH claims condition code 0, but touch request did not work 【发布时间】:2021-06-28 04:21:50 【问题描述】:

我正在提交一个 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 中。为什么它会给我一种错误的成功感?

【问题讨论】:

我建议改写您的问题,因为您的问题的答案是 BPXBATCH 返回 0,因为 BPXBATCH 没有失败。我建议使用 SYSAFF 语句来确保您在同一系统上运行所有作业。 【参考方案1】:

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

【讨论】:

另一个简单的想法是在脚本中添加一行以显示“touch”的实际返回值...添加另一行如 echo "Touch RC = $?" > /dev/console 如果对发生的事情有任何疑问,会将 RC 放在系统控制台(或您喜欢的任何其他地方)上。【参考方案2】:

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

同样根据之前的讨论,我相信您的综合系统没有在共享 UNIX 文件系统上运行。您应该确保对 UNIX 文件和目录的所有访问都是从一个单一的并且始终在同一个系统中完成的。

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

【讨论】:

以上是关于BPXBATCH 声明条件代码 0,但触摸请求不起作用的主要内容,如果未能解决你的问题,请参考以下文章

FTPConnectionClosedException:连接关闭,BPXBATCH 中没有指示

触摸手势在 Scrollview(Xcode、Swift)中不起作用

单击/触摸事件的背景颜色更改在触摸设备上不起作用

jQuery触摸事件iOS将不起作用

无法检测到 CCNode 上的触摸 - cocos2d v3.0

在 Ajax 响应中,我的 if 条件不起作用