1

在尝试找出以下方案的解决方案后,我正在就该主题与 SME 联系。我有一个非常具体的要求:

1)假设我有一个名为 SCH1 的时间表,有 3 个作业 JOB1、JOB2 和 JOB3,例如:

Schedule S1
JOB1

JOB2
FOLLOWS JOB1

JOB3
FOLLOWS JOB2

END

2) JOB1 正在调用一个shell 脚本。3) 现在,如果 JOB1 shell 脚本返回代码 0——它成功并执行 JOB2 和 JOB3。4) 如果 shell 脚本返回的代码不是 0,JOB1 仍然不应该异常终止;但应跳过所有其他作业 JOB2 和 JOB3(或在未运行的情况下完成);并且计划应标记为成功。

我在线获得了以下链接,这表明这应该是可能的。但是当我提到 Job/Schedule 定义的语法时;我无法弄清楚它应该如何写。

在作业语法中,看起来下面的方法可以解决问题,但不太确定。

 [rccondsucc "Success Condition"] 
   [recovery 
        {stop | continue | rerun}
        [after [workstation#]jobname] 
        [abendprompt “text”] ]

条件依赖:

http://www-01.ibm.com/support/knowledgecenter/SSGSPN_9.1.0/com.ibm.tivoli.itws.doc_9.1/zos/src_man/eqqr1conddepevalex.htm?lang=en

作业语法:

http://www-01.ibm.com/support/knowledgecenter/SSGSPN_9.1.0/com.ibm.tivoli.itws.doc_9.1/distr/src_ref/awsrgjobdefn.htm?lang=en

计划语法:

http://www-01.ibm.com/support/knowledgecenter/SSGSPN_9.1.0/com.ibm.tivoli.itws.doc_9.1/distr/src_ref/awsrgjsdefn.htm?lang=en

4

3 回答 3

1

我会说这是不可能的。

使用 RCCONDSUCC,您可以根据返回码微调作业的状态(SUCC 或 ABEND)。这只是意味着您不限于 RC = 0 = SUCC 或 RC > 0 = ABEND。

使用 RECOVERY,您可以指定仅当 JOB 处于 ABEND 时才应采取的操作。

在这里你想强制一个 JOB 到 SUCC 并指定一个 RECOVERY....

于 2014-11-28T23:58:59.763 回答
0

从 9.3 FP1 开始,这可以通过内置的条件依赖来实现

假设您希望 JOB3 在 JOB2 异常结束时等待,使用条件依赖项可以像这样实现您的场景
在此处输入图像描述

 SCHEDULE SCH1 
 :
 JOB1
  DOCOMMAND "myscript"
  STREAMLOGON twsuser
  SUCCOUTPUTCOND GO "RC=0"
  SUCCOUTPUTCOND NOGO "RC!=0"

 JOB2
  FOLLOWS JOB1 IF GO

 JOB3
  FOLLOWS JOB2
  FOLLOWS JOB1 IF GO
 END

JOB1SUCCOUTPUTCOND定义了 2 个:如果 RC=0 则为 GO,如果 RC!=0 则为 NOGO。两者都是 SUCCOUTPUTCOND,这意味着 JOB1 在这两种情况下都会进入 SUCC。

  • 如果 JOB1 以 RC=0 结束,则 GO 条件为真且FOLLOWS JOB1 IF GO依赖关系满足,所以 JOB2 和 JOB3 可以运行(JOB3 将等待 JOB2,因为它也有一个FOLLOWS JOB2
  • 如果 JOB1 以非 0 的 RC 结束,则 GO 为假,NOGO 为真。由于至少在 SUCCOUTPUTCOND 为真时,JOB1 在 SUCC 中完成,但FOLLOWS JOB1 IF GO不满足,JOB2 和 JOB3 将设置为SUPPR状态并且不会运行。
于 2017-03-01T08:56:29.240 回答
0

要借助条件依赖跳过 Job2 和 Job3,Job1 必须处于“E”状态。但是您可以将 Job4 添加到仅在 Job1 中止时运行的应用程序(也使用 CondDep 定义)。此作业完成 Job1(或整个应用程序)。它有效 - 我在客户会议上演示了这个例子:-)

如果这些作业具有对 Job1 的 CondDep,则 Job1 也可能完成并且作业 Job2 和 Job3 被跳过: Job1 必须处于状态“C”并且 Job1 必须以 RC<>0 结尾。

于 2016-04-27T16:04:12.943 回答