Как лучше всего остановить боевые действия машин, сохранив при этом их идентичность, чтобы упростить задачу и уменьшить количество точек отказа?
Проверить это статья что предлагает использовать Hudson (теперь Jenkins) для работы.
Отрывок:
Для удаленных заданий Hudson может входить в систему с помощью SSH, копировать свою собственную среду выполнения и запускать все, что вы хотите, в удаленной системе. Это означает, что независимо от того, скольким серверам в кластере требуются запланированные задания, Hudson может планировать, запускать и регистрировать их с одного сервера. Hudson может распределять задания динамически в зависимости от того, какие машины уже заняты, или может связывать задания с определенными ящиками.
Ура
Лучше всего поддерживать некую глобальную блокировку прямо в скрипте. Эта блокировка должна быть доступна с каждого сервера, поэтому здесь есть два очевидных варианта: использование БД (а она у вас уже есть) и использование распределенной файловой системы (а у вас ее, вероятно, нет). И, конечно же, вам придется изменить поведение скрипта, чтобы установить и снять блокировку.