Как выполнить параллельный цикл bash for - PullRequest
1 голос
/ 13 июля 2020

Как я могу заставить этот l oop использовать команду parallel linux?
 func() {
     ssh -q $cn "systemctl restart ntpd"
 }

 
 for num in $(seq 30 40) ; do
    num_tmp=$(printf "%03d" $num)
    cn="node$num_tmp"    
    func
done | parallel

Функция fun c изменена в соответствии с потребностями, в основном она входит в узел и запускает там команду (ы)

Я попытался добавить параллель в конец l oop как я видел, но это не работает

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Возможно, вот так:

seq -f "%03G" 30 40 | parallel --dry-run 'ssh -q node{} "systemctl restart ntpd"'

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

ssh -q node030 "systemctl restart ntpd"
ssh -q node031 "systemctl restart ntpd"
ssh -q node032 "systemctl restart ntpd"
ssh -q node033 "systemctl restart ntpd"
ssh -q node034 "systemctl restart ntpd"
ssh -q node035 "systemctl restart ntpd"
ssh -q node036 "systemctl restart ntpd"
ssh -q node037 "systemctl restart ntpd"
ssh -q node038 "systemctl restart ntpd"
ssh -q node039 "systemctl restart ntpd"
ssh -q node040 "systemctl restart ntpd"

Или, если у вас bash v4 или новее, он может обнулить для вас:

parallel --dry-run 'ssh -q node{} "systemctl restart ntpd"' ::: {030..040}
0 голосов
/ 14 июля 2020

Добавьте этот "&" в конец функции;

 .....
    cn="node$num_tmp"    
    func &
done
...