У меня есть скрипт, запущенный на машине A, который должен вызвать перезагрузку машины B, а затем дождаться, пока машина B полностью не восстановится. На самом деле это должно происходить несколько раз подряд, поэтому важно свести время ожидания к минимуму. (Это автоматический тест различных значений параметров загрузки.)
Эти машины работают под управлением Linux, поэтому я полагаю, что основной подход должен заключаться в установке запоздалого (например, с приоритетом 99) сценария инициализации на машине B, который каким-то образом отправляет сообщение на машину A. Я планирую установить сценарий, используя update-rc.d ${script_name} start 99 S .
. Однако я застрял в том, как отправить и дождаться сообщения.
Я полагаю, что должна быть какая-то очередь сообщений или служба координатора, которую я могу просто написать из коробки. Например, Работник зоопарка должен быть способным, хотя как его писать на удивление неочевидно. Для этого я мог бы написать небольшую клиент-серверную программу (предположительно, используя TCP-сокет), но я надеялся на более простое решение. Настройка на машине B должна выполняться полностью сценарием на машине A, поэтому в идеале можно было бы избежать таких шагов, как компиляция или установка модулей языка сценариев.
Спасибо за любые предложения!
Похоже, ты хочешь посмотреть на демон сердцебиения. Это именно то, для чего он предназначен: мониторинг наборов одноранговых узлов.
Вы также можете создать простой сетевой прослушиватель с использованием netcat или socat, который запускается поздно, а другой хост постоянно проверяет. Другой способ решить эту проблему - отправить автоматическое сообщение «Я жив» по почте с rc.local на другую машину и забрать его с помощью сценария из файла .forward или .qmail.
Не могли бы вы просто периодически пинговать, а затем проверять код выхода пинга?
Если проверка связи прошла успешно, код выхода должен быть 0:
$ ping -c 1 -t 1 1.2.3.4
...
$ echo $?
0
В случае неудачи будет 2:
$ ping -c 1 -t 1 5.6.7.8
...
$ echo $?
2