有没有并行到多台机器执行命令的工具?

nprsh虽然是可以把一条命令到多台机器上执行,但是它实际上是串行的,请问下有没有并行的在多台机器上执行命令的方法?

阅读 16k
9 个回答

谢谢邀请.

以下的工具都是我使用过的,都是支持批量方式.

  • pssh 是python版的 功能一般但可以直接知道返回是正常与否. 是开源工具. http://www.ohlinux.com中有介绍.
  • onall 是perl版的, 功能比较多,展示效果一般.可以进行脚本直接执行和copy,记录等操作. 这个在网上找有些难度.
  • pdo 是golang版本的, 是我自己写的,正在使用中的,集成了一些功能和现在工作上的一些需求,还没有开源,打算完善再开源. 到时再更新这个答案.

新年刚开始上班闲来无事整理了下.
已经开源了可以查看文章http://blog.segmentfault.com/op/1190000000404693
github https://github.com/ohlinux/pdo

找到一个叫pssh的,可是运行一个脚本如果包含从终端输入数据的话就会运行失败

新手上路,请多包涵

Xshell 可以。
同时打开多个终端/tab,连接到不同的机器,在界面底部输入命令可以同时在所有机器上执行。

新手上路,请多包涵

ubuntu下,cssh就可以

楼上的各位有点为了工具而工具哇,能原生先原生,能内置先内置。
并发其实就是靠多线程或者多进程来实现。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 
                }
新手上路,请多包涵

推荐使用Python的扩展工具Fabric
有串行和并行两种执行方式,也是基于ssh的。

顶楼上的,fabric就是一个现成的python多线程批量ssh工具,使用相当简单,并发数也可以自行控制,整个下来20行代码就足矣。
官方:http://docs.fabfile.org/en/1.8/

日常管理可以选择 ansible 支持 fork 指定并发个数

需要维护管理配置同步的话可以选择 saltstack

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题