Autosys Job Queue

时间:2015-09-17 17:17:12

标签: autosys

我试图设置 1 一个autosys作业配置,以便有一个"漏斗"工作队列行为,或者,正如我所说,在“水滴”中。模式,每个作业在给定的时间间隔后按顺序执行,本地作业失败不会级联到序列失败。

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

约束

  • 我有(任意)N个工作(所有工作都在成功工作A上执行)
    • 对于这个讨论,我们说三个(B1,B2,B3)
    • 实际生产数量可能超过100个工作岗位。
    • 所有这些工作都不会同时创建,因此添加新工作应该尽量减少
  • 这些都不应该同时执行。
    • 实际上并不是我们机器的直接问题
    • 对远程客户端计算机的副作用:作业包括文件传输,它在客户端计算机上触发侦听,但不能很好地处理。
      • 遗憾的是,客户端机器行为的适应不可能
  • 工作失败对其他工作毫无意义。
  • 每个工作之间应该有一个固定的延迟
    • 这是一个 soft 要求,我们的工作是批处理脚本,我们总是可以附加或添加 sleep 命令。
    • 我更确切地说,有一个更优雅的解决方案,特别是如果延迟是集中的:一个参数 - 如果需要,可以设置为更大的值。

我的研究状态

传奇

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

解决方案1:无故障序列

这是当前的#34;我们应该选择这个解决方案"溶液

  

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

优点:

  • 比解决方案2更少的bookeeping

缺点:

  • (当前)拖尾工作的博弈
  • 序列无法抵抗工作 ON HOLD ON ICE 很好)。

解决方案2:楼梯平行度

  

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

优点:

  • 可以将 ON HOLD 置于工作状态而不会发生。

缺点:

  • Bookeeping to know"谁是" (以及下一次实施的延迟)
  • 同时执行N个作业
  • 创造了潜在的竞争条件 ++作业执行重叠的风险,特别是如果累积小的延迟

解决方案3:奇迹盒?

我已经阅读了一些关于工作箱的内容,但具体细节不包括在内。

  

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

  • 我是否可以限制一个盒子的作业的并发执行次数(即盒子本地 max_load ,如果我理解该参数的话)?

优点:

  • 添加工作将是无痛的
  • 很少甚至没有bookeeping(盒子名称,添加新工作 - 并且它不变)
  • 工作可以 ON HOLD 而不会发生(除非我弄错了)

缺点:

  • 我不相信它无法完成(但这就是我问你的原因:))
  • ......我未能预见的任何其他问题

我的问题

  1. 解决方案3是否可能,如果是,实施它的具体命令和参数是什么?
  2. 我是否正确支持解决方案1优于解决方案2,否则 2
  3. 当然,非常欢迎适合约束的替代解决方案!
  4. 提前致谢,
    最好的问候

    PS:顺便说一下,所有这一切都是远程机器故障行为的巨型race condition经理吗?
    Yes, it is

    2 我意识到它有点偏向主观"问题拒绝规则的一部分问题,但我就问题的解决方案(可论证的)客观约束条件提出了正确性。

1 个答案:

答案 0 :(得分:0)

我建议你在下面做

  1. 将所有作业(B1,B2,B3)放入方框B中。
  2. 创建另一个工作(比如M1),这个工作将在A成功时运行。这个工作将调用shell / perl脚本(比如forcejobs.sh)
  3. shell脚本将获得B中所有作业的列表,并以延迟时间的休眠间隔开始循环。在循环内部,它将在延迟期后逐个强制启动作业。

    所以脚本概要是

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