Если вещи, которые вы хотите запустить, немного сложнее, вы можете создать функцию и использовать параллельную передачу GNU, которая:

ался распараллелить следующий скрипт, в частности цикл for. Как я могу это сделать?

#!/bin/bash
for i in `cat /root/vms`;
do
    /usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no \
        -l testuser $i -t 'echo test | sudo -S yum update -y'
done
 RomanPerekhrest13 дек. 2017 г., 08:29
как вы написали:для петли - Вы хотите запустить несколькоfor петли параллельно? В этом случае вы должны указать количество циклов

Ответы на вопрос(2)

Решение Вопроса

замещать

/usr/bin/sshpass ...

с участием

/usr/bin/sshpass ... &
 RomanPerekhrest13 дек. 2017 г., 08:27
@ Gosatriani, как ты это понимаешь?выполняется поочередно«Технически такой подход запускает каждую команду как фоновое задание, работающее параллельно
 Cyrus13 дек. 2017 г., 07:58
Вот что делает это изменение. Если ваш файл / root / vms содержит 20 строк, это запускает 20 sshpass параллельно.
 gosatriani13 дек. 2017 г., 07:49
здесь дело в том, что цикл for выполняется последовательно. я хочу выполнить цикл for параллельно.

Вы можете сделать это довольно кратко сGNU Parallel нравится:

parallel -a /root/vms /usr/bin/sshpass -p \'test\' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser {} -t \'echo test \| sudo -S yum update -y\'

Итак, если ваш/root/vms содержит:

vm-ubuntuLTS
vm-centos
vm-debian
vm-arch

и вы добавляете--dry-run возможность посмотреть, что он будет делать, фактически ничего не делая:

parallel --dry-run -a /root/vms /usr/bin/sshpass -p \'test\' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser {} -t \'echo test \| sudo -S yum update -y\'

Пример вывода

/usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser vm-debian -t 'echo test | sudo -S yum update -y'
/usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser vm-centos -t 'echo test | sudo -S yum update -y'
/usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser vm-ubuntuLTS -t 'echo test | sudo -S yum update -y'
/usr/bin/sshpass -p 'test' /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser vm-arch -t 'echo test | sudo -S yum update -y'

Вместо того, чтобы повторять все вашиssh варианты, рассмотрите возможность помещения их в файл по адресу$HOME/.ssh/config нравится:

Host vm-centos
HostName vm-centos
User freddy
   StrictHostKeyChecking no

Host vm-arch
HostName vm-arch
   User frog
   Port 2222
   ServerAliveInterval 10
 Mark Setchell18 дек. 2017 г., 12:19
Это означает, что ваш дистрибутив отправляет старую версиюGNU Parallel, Либо обновите его, либо просто используйтеparallel --gnu <OTHER OPTIONS> Ваша версия с 2014 года.
 gosatriani18 дек. 2017 г., 12:14
Когда я использую вышеупомянутую команду, некоторая синтаксическая ошибка идет параллельно: Предупреждение: ВЫ ИСПОЛЬЗУЕТЕ --tollef. ЕСЛИ ДЕЙСТВИТЕЛЬНО ДЕЙСТВУЕТ ВЕЩЕСТВО --gnu. Параллельно: Предупреждение: --tollef устарел и будет удален 20140222. Параллельно: Предупреждение: См .:lists.gnu.org/archive/html/parallel/2013-02/msg00018.html / usr / bin / sshpass: vm-centos: команда не найдена -p: vm-centos: команда не найдена 'test': vm-centos: команда не найдена / usr / bin / ssh: vm-centos: команда не найдена - o: vm-centos: команда не найдена

Ваш ответ на вопрос