Параллельное выполнение скрипта sh на нескольких серверах

Параллельное выполнение скрипта sh на нескольких серверах

Я пытаюсь выполнить действие на нескольких серверах в своем цикле, но мне хотелось бы запустить свои действия на первом сервере и перейти сразу ко второму, не дожидаясь завершения первого.

HOSTS="host1 host2"
    For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done 

У кого-нибудь есть идеи, как это сделать в Linux sh bash?

Заранее спасибо.

решение1

pdshКажется, он соответствует вашим потребностям. Запускает ssh-соединения параллельно, в многопоточном режиме.

Пример:

$ pdsh -w 192.168.1.4,192.168.1.250 uname -r
192.168.1.4: 2.6.32-431.17.1.el6.x86_64
192.168.1.250: 2.6.32-431.11.2.el6.x86_64
$

Параллельная оболочка с pdsh

Как отправить один файл на несколько удаленных сайтов одновременно?

решение2

Используйте GNU Parallel:

parallel -S host1,host2 --nonall uname -a

Если задача более сложная, создайте функцию:

do_actions() {
   action
   packed
   function
}
export -f do_actions
HOSTS="host1,host2"
parallel -S $HOSTS --ssh 'ssh -l '$USERNAME --nonall --env do_actions do_actions

Если имя пользователя такое же, whoamiто этого достаточно:

parallel -S $HOSTS --nonall --env do_actions do_actions

GNU Parallel не обязательно устанавливать глобально: если он не установлен, вы можете выполнить персональную установку.

wget pi.dk/3
bash 3

Связанный контент