Сначала я использовал linux cron
планировать задания. Поскольку количество рабочих мест и зависимости между ними увеличиваются, мне становится все труднее поддерживать.
Например,
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
Как видите, я рассчитываю DAG критический путь и время обработки вручную. Это очень банально. И по мере роста числа рабочих мест легко ошибиться.
Есть ли лучший способ запланировать эти задания? Я ищу общий универсальный инструмент для выполнения этих работ.
Если ваши задания линейны и не выполняются случайным образом, я бы предложил вызывать все эти задания в отдельном сценарии оболочки, и вы можете продолжать добавлять эти задания в этот сценарий оболочки независимо от количества заданий. Потому что вы никогда не узнаете, сколько времени потребуется для выполнения одного задания, учитывая все системные аспекты, такие как простаивающая система, система с высокой загрузкой и система со средней загрузкой. Дайте мне знать, что вы думаете.
Так что бы пошло не так, если бы ты просто сделал
0 4 * * 1-5 run-job-A && run-job-B && run-job-C
тогда B будет запущен только после успешного завершения A, а C - после успешного завершения B.
Просто интересуюсь. :)
Отличный вопрос, и вы не одиноки. В сообществе HPC это обычная проблема, потому что задания могут иметь переменное время выполнения, но при этом между заданиями существует сильная зависимость. Я бы посмотрел на то, что делают эти люди, для вдохновения. Например, планировщик OpenLava - это планировщик с открытым исходным кодом, который явно обслуживает сопоставление зависимостей.