如何安排复杂的工作

起初,我用linux cron来安排工作。 由于他们之间的工作和依赖增加,我觉得很难维持。

例如,

 0 4 * * 1-5 run-job-A 10 4 * * 1-5 run-job-B 15 4 * * 1-5 run-job-C 

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

在这里输入图像说明

工作DAG

如您所见,我手动计算DAG关键path和处理时间。 这是非常微不足道的。 随着这些工作的增长,这很容易让事情变得错误。

有没有更好的方式来安排这些工作? 我正在寻找一个共同的,通用的工具来处理这些工作。

如果你的工作是线性的而不是随机运行的话,我会build议在一个单独的shell脚本中调用这些所有的工作,并且不pipe作业的数量如何,你都可以继续添加这些工作。 考虑到空闲系统,高利用率系统和中等系统利用率等因素,你永远不会知道一项工作将花费多less时间来执行。 让我知道你的想法。

那么如果你做了什么就会出错

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

那么B只能在A成功完成之后运行,C之后的C才能成功完成。

就是想。 🙂

伟大的问题,你并不孤单。 在HPC社区,这是一个普遍的问题,因为工作可以有不同的运行时间,但是在工作中存在强烈的依赖性​​sorting。 我会看看这些人正在做什么的灵感。 例如,OpenLava调度程序是一个开放源代码调度程序,明确地支持依赖关系映射。