Мой Баш-Фу не силен. Прямо сейчас у меня есть что-то вроде
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