Чтобы "можно было безболезненно выключить один из узлов на обслуживание (или при аварийном отключении), а планировщик самостоятельно переехал на другой доступный узел" - добавляют абстракцию между железом и ОС в виде виртуализации/контейнеров.
В таком виде планировщик находится внутри ВМ и в случае аварии/работ переезжает на другое железо, не требуя никакого дополнительного ПО для настройки.
Делайте не через крон, а через systemd-таймеры - там есть масса настроек, относящихся к совместным запускам сервисов, зависимостям, непересекаемости и т. д.
А где у вас пользователь, из-под которого нужно запускать скрипт? Или, если это не кронтаб, а чей-то личный крон (в котором пользователя указывать не нужно по понятным причинам) - есть ли у этого "кого-то" доступ к каталогу /root и самому скрипту?
А в одно задание крона эти две операции нельзя поместить?
В целом, разумеется, можно проверять наличие процесса. Я бы написал небольшой скрипт, который перед началом создавал lock-файл, а в конце - удалял или переименовывал его.