Назад | Перейти на главную страницу

Как я могу заставить ssh ждать, пока команда не завершится?

У меня есть сценарий, который выглядит так:

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."