2

У меня есть небольшой скрипт для установки на удаленной машине обновления.

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

ssh root@myMachine << COMMANDS_ISSUED
   ###... Tasks
   init 6
COMMANDS_ISSUED
sleep 180s
ssh root@myMachine << POST_REBOOT_COMMANDS
   ###.... More stuff
POST_REBOOT_COMMANDS

Есть ли более элегантный способ сделать это? Как пинговать машину все 5 секунд, максимум 4 минуты? Я играю на нескольких Linux-машинах, у которых разное время загрузки, и если мой сценарий продолжится сразу после перезагрузки, это может сэкономить довольно много времени для меня. (Примечание: я не хочу распараллеливать выполнение на всех машинах, как я хочу видеть для каждой машины, если все работает нормально)

2 ответа2

1

Я бы сказал, пинг машины, пока она не будет.

while ! ping -c 1 192.168.1.1 &>/dev/null; do :; done

"c 1" будет отправлять по одному запросу за раз, поэтому по одному в каждом цикле. Если ответа нет, ping вернет false и цикл продолжится.

Тело цикла пустое - вы можете добавить туда короткую команду сна, если хотите. В противном случае используется двоеточие «:», которое является [командой no-op] [1]. Это потому, что вы не можете иметь пустое тело цикла.

-1

Вы можете определить crontab следующим образом:

@reboot script-to-execute

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .