最初我使用 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 调度程序是一个开源调度程序,明确满足依赖关系映射的要求。