起初,我用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调度程序是一个开放源代码调度程序,明确地支持依赖关系映射。