nprsh虽然是可以把一条命令到多台机器上执行,但是它实际上是串行的,请问下有没有并行的在多台机器上执行命令的方法?
裸一些的话可以用
cat serverlist | xargs -P 5 -I{} ssh -t {} "cmd"
xargs -P参数可以并行执行。自己查一下手册
如果是一些日常的部署工作,且比较复杂,可以考虑:
ansible http://www.ansibleworks.com/
fab http://docs.fabfile.org/en/1.8/
楼上的各位有点为了工具而工具哇,能原生先原生,能内置先内置。
并发其实就是靠多线程或者多进程来实现。shell脚本不支持多线程,那就fork出shell子进程来达到并行的效果好了。
这是我写的批量发布一组服务器的脚本,可以参照改一改。
第12行fork出ssh子进程执行命令
batch(){
counts=1
array=($(cat $3))
for server in ${array[*]}
do
echo "发布第${counts}台: ${server}"
if [ -z "${ACTION}" ]
then
ACTION="start"
fi
(nohup ${DEPLOY_SCRIPT} $1 $2 $server ${ACTION} &)
let "r=${counts}%${GROUP_SIZE}"
if [ $r == 0 ]
then
echo "一组${GROUP_SIZE}台发布完毕,休眠${REST_SECONDS}秒"
sleep ${REST_SECONDS}
fi
let "counts=${counts}+1"
done
}
顶楼上的,fabric就是一个现成的python多线程批量ssh工具,使用相当简单,并发数也可以自行控制,整个下来20行代码就足矣。
官方:http://docs.fabfile.org/en/1.8/
2 回答1.6k 阅读✓ 已解决
2 回答1.1k 阅读
1 回答1.8k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
1 回答775 阅读✓ 已解决
1 回答603 阅读✓ 已解决
1 回答974 阅读✓ 已解决
谢谢邀请.
以下的工具都是我使用过的,都是支持批量方式.
新年刚开始上班闲来无事整理了下.
已经开源了可以查看文章http://blog.segmentfault.com/op/1190000000404693
github https://github.com/ohlinux/pdo