У меня есть сценарий, который выглядит так:
SERVER="RHT372 RHTl373 RHT374 RHTl375"
case $1 in
"stop")
for SERVER in $SERVER
do
echo "================================================"
echo Stopping $SERVER
ssh root@$SERVER /var/tmp/stopServer.sh server1
done
;;
Как я могу заставить ssh дождаться завершения команды, а затем перейти к следующему серверу и выполнить ту же команду?
Чтобы дать вам пример, посмотрите это:
#!/bin/bash
(( $# != 1 )) && printf "%s\n" "Please provide one parameter"; exit 1;
servers=( srv1 srv2 srv3 )
case $1 in
"stop")
for srv in "${servers[@]}"
do
hostAlive=$(ping -s 64 "$srv" -c 1 | grep packet | awk '{print $(NF-4)}')
echo "=========="
echo "Stopping $srv"
[[ "$hostAlive" == "0%" ]] && ssh root@$srv '/var/tmp/stopServer.sh server1'
done;;
"start")
for srv in "${servers[@]}"
do
echo "=========="
echo "Starting $srv"
ssh....
done;;
*)
echo "Not a valid option"
exit 1;;
esac
Команда ssh запустится только в том случае, если предыдущая завершила свою работу. Если вам нужно узнать больше, см. wait
команда.
Сколько времени нужно, чтобы выключить один сервер?
Ты можешь использовать sleep
между выключениями сервера.
Использование:
echo "Hi, I'm sleeping for 5 seconds..."
sleep 5
echo "all Done."