Autosys 作业队列
Autosys Job Queue
我正在尝试设置1 autosys 作业配置,以便具有 "funnel" 作业队列行为,或者,如我所说,在 'waterdrops' 模式,每个作业在给定的时间间隔后按顺序执行,本地作业失败不会级联成顺序失败。
1 (要求设置,实际上,因为我不控制 Autosys 机器)
约束
- 我有一个(任意)N 个作业(全部在作业 A 成功 时执行)
- 对于这个讨论,假设三个(B1、B2、B3)
- 实际生产数量可能超过 100 个工作岗位。
- 不会同时创建所有这些工作,因此添加新工作应尽可能不那么痛苦。
- None 应该同时执行。
- 我们的机器
实际上不是 直接 问题
- 但是 对远程客户端机器的副作用:作业包括文件传输,它在客户端机器上触发监听,处理不好。
- 不幸的是,不可能适应客户端-机器行为。
- 工作失败对其他工作没有意义。
- 每项工作之间应该有规律的延迟
- 这是一个 soft 要求,因为我们的作业是批处理脚本,我们总是可以附加或预先添加 sleep 命令。
- 我宁愿有一个更优雅的解决方案,尤其是在延迟集中的情况下:一个参数 - 如果需要,可以将其设置为更大的值。
我的研究现状
图例
A(s) : 成功 工作状态
A(d) : 完成 作业状态
解决方案 1:不失败序列
这是当前的"we should pick this solution"解决方案。
A (s) --(delay D)--> B(d) --(delay D)--> B2(d) --(delay D)--> B3 ...
优点:
- 比解决方案 2 更少的簿记
缺点:
- (当前)拖尾作业的簿记
- 序列不会拒绝工作 ON HOLD(ON ICE 很好)。
解决方案 2:阶梯式平行度
A(s) ==(delay D)==> B1
A(s) ==(delay D x2)==> B2
A(s) ==(delay D x3)==> B3
...
优点:
- 作业可以 暂停 而不会发生。
缺点:
- 要知道的簿记"who is when"(以及下一个延迟实施的时间是什么)
- N个作业同时执行
- 已创建基础竞争条件
++ 作业执行重叠的风险,特别是如果小延迟累积
解决方案 3:奇迹盒子?
我已经阅读了一些关于 Job Boxes 的内容,但具体细节让我望而却步。
</code> <code>
</code> <code>
</code> <code>
</code> <code>
-----------------
A(s) ====> | B1, B2, B3 |
</code> <code>
</code> <code>
</code> <code>
</code> <code>
-----------------
- 我们可以限制盒子作业的并发执行数吗(即盒子本地max_load,如果我理解那个参数的话)?
优点:
- 添加工作会很轻松
- 几乎没有记账(邮箱名称,用于添加新工作 - 而且它是常量)
- 工作可以搁置而不会发生(除非我弄错了)
缺点:
- 我半信半疑这是不可能的(但这就是我问你的原因:))
- ...我未能预见的任何其他问题
我向 SO 提出的问题
- 解决方案 3 是否可行,如果可行,实现它的具体命令和参数是什么?
- 在其他方面2,我支持解决方案 1 而不是解决方案 2 是否正确?
- 适合约束条件的替代解决方案当然非常受欢迎!
提前致谢,
最好的问候
PS:顺便说一下,所有这些都是远程机器失败行为的巨型 race condition 管理器吗?
Yes, it is.
2 我知道它有点偏向问题拒绝规则的 "subjective" 部分,但我问的是关于解决方案对我的(可以说)objective 约束的正确性。
我建议你做下面的事情
- 将所有作业(B1、B2、B3)放入一个盒子作业 B。
- 创建另一个作业(例如 M1),它将 运行 A 成功。该作业将调用 shell/perl 脚本(例如 forcejobs.sh)
shell脚本会得到B中所有作业的列表,并开始一个睡眠间隔为delay period的循环。在内部循环中,它会在延迟期后强制开始一个作业。
所以剧本的大纲是
get all the jobs in B
for each job start for loop
force start the job
sleep for delay interval
在循环结束时,当所有作业都成功启动后,您可以使用无限循环并不断检查作业状态。一旦所有作业都为 SU/FA 或其他,您可以结束脚本并将结果发送到 you/stdout 并完成作业 M1.
我正在尝试设置1 autosys 作业配置,以便具有 "funnel" 作业队列行为,或者,如我所说,在 'waterdrops' 模式,每个作业在给定的时间间隔后按顺序执行,本地作业失败不会级联成顺序失败。
1 (要求设置,实际上,因为我不控制 Autosys 机器)
约束
- 我有一个(任意)N 个作业(全部在作业 A 成功 时执行)
- 对于这个讨论,假设三个(B1、B2、B3)
- 实际生产数量可能超过 100 个工作岗位。
- 不会同时创建所有这些工作,因此添加新工作应尽可能不那么痛苦。
- None 应该同时执行。
- 我们的机器 实际上不是 直接 问题
- 但是 对远程客户端机器的副作用:作业包括文件传输,它在客户端机器上触发监听,处理不好。
- 不幸的是,不可能适应客户端-机器行为。
- 工作失败对其他工作没有意义。
- 每项工作之间应该有规律的延迟
- 这是一个 soft 要求,因为我们的作业是批处理脚本,我们总是可以附加或预先添加 sleep 命令。
- 我宁愿有一个更优雅的解决方案,尤其是在延迟集中的情况下:一个参数 - 如果需要,可以将其设置为更大的值。
我的研究现状
图例
A(s) : 成功 工作状态
A(d) : 完成 作业状态
解决方案 1:不失败序列
这是当前的"we should pick this solution"解决方案。
A (s) --(delay D)--> B(d) --(delay D)--> B2(d) --(delay D)--> B3 ...
优点:
- 比解决方案 2 更少的簿记
缺点:
- (当前)拖尾作业的簿记
- 序列不会拒绝工作 ON HOLD(ON ICE 很好)。
解决方案 2:阶梯式平行度
A(s) ==(delay D)==> B1
A(s) ==(delay D x2)==> B2
A(s) ==(delay D x3)==> B3
...
优点:
- 作业可以 暂停 而不会发生。
缺点:
- 要知道的簿记"who is when"(以及下一个延迟实施的时间是什么)
- N个作业同时执行
- 已创建基础竞争条件 ++ 作业执行重叠的风险,特别是如果小延迟累积
解决方案 3:奇迹盒子?
我已经阅读了一些关于 Job Boxes 的内容,但具体细节让我望而却步。
</code> <code>
</code> <code>
</code> <code>
</code> <code>
-----------------
A(s) ====> | B1, B2, B3 |
</code> <code>
</code> <code>
</code> <code>
</code> <code>
-----------------
- 我们可以限制盒子作业的并发执行数吗(即盒子本地max_load,如果我理解那个参数的话)?
优点:
- 添加工作会很轻松
- 几乎没有记账(邮箱名称,用于添加新工作 - 而且它是常量)
- 工作可以搁置而不会发生(除非我弄错了)
缺点:
- 我半信半疑这是不可能的(但这就是我问你的原因:))
- ...我未能预见的任何其他问题
我向 SO 提出的问题
- 解决方案 3 是否可行,如果可行,实现它的具体命令和参数是什么?
- 在其他方面2,我支持解决方案 1 而不是解决方案 2 是否正确?
- 适合约束条件的替代解决方案当然非常受欢迎!
提前致谢,
最好的问候
PS:顺便说一下,所有这些都是远程机器失败行为的巨型 race condition 管理器吗?
Yes, it is.
2 我知道它有点偏向问题拒绝规则的 "subjective" 部分,但我问的是关于解决方案对我的(可以说)objective 约束的正确性。
我建议你做下面的事情
- 将所有作业(B1、B2、B3)放入一个盒子作业 B。
- 创建另一个作业(例如 M1),它将 运行 A 成功。该作业将调用 shell/perl 脚本(例如 forcejobs.sh)
shell脚本会得到B中所有作业的列表,并开始一个睡眠间隔为delay period的循环。在内部循环中,它会在延迟期后强制开始一个作业。
所以剧本的大纲是
get all the jobs in B for each job start for loop force start the job sleep for delay interval
在循环结束时,当所有作业都成功启动后,您可以使用无限循环并不断检查作业状态。一旦所有作业都为 SU/FA 或其他,您可以结束脚本并将结果发送到 you/stdout 并完成作业 M1.