我一直在尝试并行化以下脚本,特别是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
我一直在尝试并行化以下脚本,特别是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
替换
/usr/bin/sshpass ...
使用
/usr/bin/sshpass ... &
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'
$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
parallel --gnu <OTHER OPTIONS>
。你的版本是从2014年的。 - Mark Setchell--nonall
选项和一个环境变量来设置要使用的ssh
命令:PARALLEL_SSH="/usr/bin/sshpass -p test /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser -t"
export PARALLEL_SSH
parallel --slf /root/vms --nonall 'echo test | sudo -S yum update -y'
complex_task() {
# Do complex task
echo test | sudo -S yum update -y
# and a lot more complex stuff
}
export -f complex_task
PARALLEL_SSH="/usr/bin/sshpass -p test /usr/bin/ssh -o StrictHostKeyChecking=no -l testuser -t"
export PARALLEL_SSH
parallel --slf /root/vms --env complex_task --nonall complex_task
for
循环吗?那么你应该指定循环的数量。 - RomanPerekhrest