Проблема / дилемма
В настоящее время я занят созданием сценария для удаленного запуска серверов (с CentOS 6.x и CentOS 7.x). Пока что скрипт работает, но зависает от одной мелочи. Ну на самом деле это не зависает, но это не дает подробную информацию о том, что происходит. Другими словами, я не получаю верную информацию в bash о том, что работа была завершена правильно.
Я пробовал разные вещи, однако зависает со следующим сообщением (которое повторяется бесконечно):
servername is still installing and configuring packages...
PING 100.125.150.175 (100.125.150.175) 56(84) bytes of data.
64 bytes from 100.125.150.175: icmp_seq=1 ttl=63 time=0.152 ms
64 bytes from 100.125.150.175: icmp_seq=2 ttl=63 time=0.157 ms
64 bytes from 100.125.150.175: icmp_seq=3 ttl=63 time=0.157 ms
64 bytes from 100.125.150.175: icmp_seq=4 ttl=63 time=0.143 ms
64 bytes from 100.125.150.175: icmp_seq=5 ttl=63 time=0.182 ms
--- 100.125.150.175 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 120025ms
rtt min/avg/max/mdev = 0.143/0.158/0.182/0.015 ms
servername is still installing and configuring packages...
PING 100.125.150.175 (100.125.150.175) 56(84) bytes of data.
64 bytes from 100.125.150.175: icmp_seq=1 ttl=63 time=0.153 ms
64 bytes from 100.125.150.175: icmp_seq=2 ttl=63 time=0.132 ms
64 bytes from 100.125.150.175: icmp_seq=3 ttl=63 time=0.142 ms
etc....
Так что по какой-то причине он не ограничивается следующей строкой кода или не выполняет следующее действие. Поскольку это только обратная связь для меня (или другого пользователя), это не главная проблема. Но было бы неплохо получить этот функционал и предоставить (подробную) информацию о текущем прогрессе или о том, что скрипт / сервер фактически делает в данный момент. К сожалению, это не относится к вышеуказанному (последнему) куску кода.
Это текущий фрагмент кода, который у меня есть (да, это беспорядок):
while true;
do
#ping -c3 -i3 $HWNODEIP > /dev/null
#ping -c5 -i30 $HWNODEIP > /dev/null
ping -c5 -i30 $HWNODEIP
if [ $? -eq 1 ] || [ $? -eq 2 ] || [ $? -eq 68 ]
then
echo -e " "
echo -e "Kickstart part II also done. $HOSTNAME will be rebooted one more time."
sleep 5
######return 0
echo -e " "
printf "%s" "Waiting for $HOSTNAME to come back online: "
while ! ping -c 1 -n -w 30 $HWNODEIP &> /dev/null
do
printf "%c" "."
#sleep 10
done
echo -e " "
echo -e "Reboot is done and $HOSTNAME is back online. Performing final check. Please wait..."
sleep 10
echo -e " "
sudo /usr/local/collectHWdata.pl $HWNODEIP
ssh root@$HWNODEIP "while ! test -e /root/kickstart-DONE; do sleep 3; done; echo KICKSTART IS DONE\!"
echo -e " "
exit
else
echo -e " "
echo -e "$HOSTNAME is still installing and configuring packages..."
fi
done
Sidenote: Я удалил> / dev / null # 5 для отладки (не то, чтобы это помогло)
Я предполагаю, что я использую вещи неправильно, и я ни в коем случае не опытный сценарист;Я могу делать только мелочи, но, конечно, я делаю все возможное. Я дурачился с этим с прошлой недели и до сих пор ничего не получаю в этой части.
Чего я пытаюсь достичь?
Сервер перезагружается после выбранной версии CentOS, создавая разделы инастройка сети. Это все работает. Выше приведенный фрагмент после перезагрузки. Теперь он установит выбранные мной пакеты, настроит различные вещи (например, Nagios) и установит / скомпилирует определенные модули PERL. И еще несколько мелких вещей.
В фоновом режиме это делается правильно. Я хотел сделать скрипт (приведенный выше фрагмент кода), чтобы сервер все еще был занят установкой вещей и тому подобного. Поскольку мне не хватает знаний, чтобы сделать это, я решил использовать другой подход;проверьте, подключен ли сервер к сети (другими словами, он все еще устанавливается). Пока сервер подключен к сети, он все еще явно устанавливает / настраивает. После этого сервер перезагрузится еще раз, чтобы выполнить последние 2 команды (как видно из моего фрагмента). Однако (здесь проблема) он никогда не выполняет эти команды, хотя кикстарт полностью выполнен.
Так что я предполагаю, что я делаю что-то не так и даже могу испортить вещи (или запутался при этом). Может быть, у кого-то есть идея, решение или совершенно другой подход к решению и решению этой проблемы (или, по крайней мере, я на это надеюсь).
Другие вещи, которые я пробовал до сих пор? Ну, я пробовал различные команды ping, и я также пробовал nc (netcat), но также без хорошего результата. Я каждый раз ударяю кирпичную стену последними двумя командами, и она продолжает пинговать, вместо того, чтобы показывать, что кикстарт был сделан ... Я думаю, что потратил несколько часов (с прошлой недели) на это уже, не доходя никуда.
Так что я надеюсь, что кто-то может взглянуть на это и сказать мне, что я делаю неправильно, и, возможно, есть лучший подход (кроме проверки связи с сервером), чтобы проверить, все еще ли он занят. Возможно (удаленная) проверка yum, perl или службы, чтобы скрипт знал, что он все еще занят.
Извините за длинный пост, но я знаю, когда предоставляю как можно больше информации, включаяпримеры кода и результаты, это более "ценится". Поэтому я надеюсь, что предоставил адекватную информацию. Если нет, дайте мне знать. Я постараюсь добавить как можно больше информации. Как всегда, я всегда готов изучить или изменить свой подход.
Спасибо, что уже прочитали мой пост!