如何安排复杂的工作

如何安排复杂的工作

最初我使用 linuxcron来调度作业。随着作业和它们之间的依赖关系的增加,我发现很难维护。

例如,

0 4 * * 1-5 run-job-A

10 4 * * 1-5 run-job-B

15 4 * * 1-5 run-job-C

作业 B 在作业 A 完成后运行,作业 C 在作业 A 和作业 B 都完成后运行。我假设作业 A 可以在 10 分钟内完成,作业 B 可以在 5 分钟内完成。所以我让作业 B 在 4:10 运行,作业 C 在 4:15 运行。

在此处输入图片描述

作业 DAG

正如你所见,我计算有向无环图手动计算关键路径和处理时间。这非常琐碎。而且随着这些工作的增长,很容易出错。

有没有更好的方法来安排这些工作?我正在寻找一种通用的工具来处理这些工作。

答案1

如果您的作业是线性的并且不是随机运行的,我建议在单独的 shell 脚本中调用所有这些作业,并且您可以继续向这个 shell 脚本添加这些作业,而不管作业数量多少。因为考虑到所有系统方面(如空闲系统、高利用率系统和中等利用率系统),您永远不知道执行一项作业需要多长时间。请告诉我您的想法。

答案2

那么如果你这样做,会发生什么问题

0 4 * * 1-5 run-job-A && run-job-B && run-job-C

那么只有在 A 成功完成后才会运行 B,并且只有在 B 成功完成后才会运行 C。

就是想。 :)

答案3

好问题,你并不孤单。在 HPC 社区中,这是一个常见问题,因为作业的运行时间可能不同,但作业之间存在很强的依赖关系顺序。我会看看这些人在做什么来获得灵感。例如,OpenLava 调度程序是一个开源调度程序,明确满足依赖关系映射的要求。

相关内容