Заставьте bash подождать, пока не будет завершен кикстарт на удаленном сервере (по завершении будет создан файл) - PullRequest
0 голосов
/ 27 сентября 2019

Я создаю скрипт для запуска нескольких серверов.Я почти закончил, однако я хочу, чтобы bash-скрипт ждал, пока не будет выполнен кикстарт сервера.

Когда кикстарт будет выполнен и сервер будет перезагружен, файл будет создан на удаленном кикстарт-сервере, расположенном под" / root / " и называется " kickstart-DONE "

Можно ли заставить скрипт bash подождать, пока он увидит этот файл, а затем опубликовать что-то вроде«Готово!» ...?

Я пытался искать на форумах и в Интернете, но, возможно, я ищу неправильно, так как не смог найти что-то подходящее для этой проблемы.Черт возьми, я даже не знаю, возможно ли это вообще.

Короче говоря;Я запускаю свой скрипт, который запускает сервер.После выполнения кикстарта на удаленном (- kickstarted) сервере будет создан файл с именем: kickstart-DONE.Для сценария это будет указанием на то, что кикстарт полностью выполнен и сервер можно использовать.Как сделать так, чтобы скрипт знал об этом?

Я надеюсь, что кто-то понимает, что я имею в виду и пытаюсь достичь ....

Заранее спасибо.

// РЕДАКТИРОВАТЬ

решено!Благодаря Коулу Тирни!

Коул Тирни дал несколько хороших ответов, однако, хотя он работает, он не ждет, пока сервер не будет запущен.Я запустил сценарий, чтобы запустить сервер, и в конце он запустил следующую команду:

ssh root@$HWNODEIP "while ! test -e /root/kickstart-DONE; do sleep 3; done; echo KICKSTART IS DONE...\!"

Однако, поскольку запуск кикстарта может занять некоторое время (в зависимости от скорости сервера и т. Д., От 15 минут до 1).час).Время ожидания команды:

ssh: подключение к хосту 100.125.150.175 порт 22: Превышено время ожидания соединения

Есть ли способ, по которому сценарий вообще не прерываетсяи поддерживает его до тех пор, пока сервер не вернется или пока он не займет более 1 часа или около того?

Может быть, есть способ заставить его показать, что скрипт все еще активен?Как "Ожидание ... 5 минут прошло".«Ожидание ... прошло 10 минут».и т.д.

Значит, он дает текущему пользователю некоторую информацию, что он не умер?

1 Ответ

1 голос
/ 27 сентября 2019

Вы можете звонить sleep, пока файл не существует:

while ! test -e /root/kickstart-DONE; do sleep 3; done; echo kickstart done

Или спать, пока сервер не принимает соединения ssh.Запустите следующую команду netcat локально, чтобы проверить, открыт ли на сервере порт 22 (удалите echo closed;, если вы не хотите получать дополнительную обратную связь):

while ! nc -zw2 $HWNODEIP 22; do echo closed; sleep 3; done

В дополнение к этому полезно настроитьзапись хоста в ~/.ssh/config.Вы можете добавить всевозможные опции ssh, не делая вашу команду ssh громоздкой.Параметры, общие для всех записей хоста, могут быть добавлены за пределы записей хоста.Смотрите man ssh_config для других вариантов.Вот пример (server1 может быть чем угодно, заменитьс IP-адресом сервера):

Host server1
    Hostname <server ip>
    User root

Затем использовать его:

ssh server1 'some command'

Обратите внимание, что многие системы не разрешают ssh-соединения из root по соображениям безопасности.Вы можете рассмотреть возможность добавления другого пользователя для кикстарта.Добавьте этого пользователя в sudoers, если требуется root-доступ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...