Autosys 作业队列

Autosys Job Queue

我正在尝试设置1 autosys 作业配置,以便具有 "funnel" 作业队列行为,或者,如我所说,在 'waterdrops' 模式,每个作业在给定的时间间隔后按顺序执行,本地作业失败不会级联成顺序失败。

1 (要求设置,实际上,因为我不控制 Autosys 机器)


约束


我的研究现状

图例

A(s) : 成功 工作状态
A(d) : 完成 作业状态

解决方案 1:不失败序列

这是当前的"we should pick this solution"解决方案。

A (s) --(delay D)--> B(d) --(delay D)--> B2(d) --(delay D)--> B3 ...

优点:

缺点:

解决方案 2:阶梯式平行度

A(s) ==(delay D)==> B1
A(s) ==(delay D x2)==> B2
A(s) ==(delay D x3)==> B3
...

优点:

缺点:

解决方案 3:奇迹盒子?

我已经阅读了一些关于 Job Boxes 的内容,但具体细节让我望而却步。

</code> <code> </code> <code> </code> <code> </code> <code>-----------------
A(s) ====> | B1, B2, B3 |
</code> <code> </code> <code> </code> <code> </code> <code>-----------------

优点:

缺点:


我向 SO 提出的问题

  1. 解决方案 3 是否可行,如果可行,实现它的具体命令和参数是什么?
  2. 在其他方面2,我支持解决方案 1 而不是解决方案 2 是否正确?
  3. 适合约束条件的替代解决方案当然非常受欢迎!

提前致谢,
最好的问候

PS:顺便说一下,所有这些都是远程机器失败行为的巨型 race condition 管理器吗?
Yes, it is.

2 我知道它有点偏向问题拒绝规则的 "subjective" 部分,但我问的是关于解决方案对我的(可以说)objective 约束的正确性。

我建议你做下面的事情

  1. 将所有作业(B1、B2、B3)放入一个盒子作业 B。
  2. 创建另一个作业(例如 M1),它将 运行 A 成功。该作业将调用 shell/perl 脚本(例如 forcejobs.sh)
  3. shell脚本会得到B中所有作业的列表,并开始一个睡眠间隔为delay period的循环。在内部循环中,它会在延迟期后强制开始一个作业。

    所以剧本的大纲是

      get all the jobs in B
      for each job start for loop
           force start the job
      sleep for delay interval
    
  4. 在循环结束时,当所有作业都成功启动后,您可以使用无限循环并不断检查作业状态。一旦所有作业都为 SU/FA 或其他,您可以结束脚本并将结果发送到 you/stdout 并完成作业 M1.