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

Много одновременных команд SSH в сценарии bash?

Мой Баш-Фу не силен. Прямо сейчас у меня есть что-то вроде

function update_project {
  for i in server-{1,2,3,4} ; do
    echo "Updating $i"
    ssh $i "git pull"
  done
}

Количество серверов растет с каждым днем, и, поскольку каждое обновление занимает около 20 секунд, я бы хотел выполнять запросы одновременно. Как лучше всего это сделать, сохранив при этом возможность видеть результат (например, неудачное слияние)?

func позволит вам отправить команду на произвольное количество машин и позволит вам наблюдать за выводом.

Почему вы пытаетесь изобрести велосипед? Просто используйте Capistrano для развертывания кода вашего проекта. Он предназначен именно для этой цели и выполняет развертывание параллельно на всех настроенных машинах.

Есть несколько параллельных проектов ssh. Ищите pssh.

Один из других ответов - правильный вариант, но чтобы напрямую ответить на ваш вопрос, просто добавьте амперсанд в конце вашей команды:

ssh $i "git pull" &

Если у вас есть GNU Parallel http://www.gnu.org/software/parallel/ установлен, вы можете сделать это:

parallel --slf hostfile --nonall --tag git pull

Вы можете установить GNU Parallel просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вводные видео о GNU Parallel, чтобы узнать больше: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1