V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
gavingeng
V2EX  ›  Linux

linux下的批量上传文件到部署服务器,有哪些好用的命令或者工具

  •  
  •   gavingeng · 2012-09-05 01:21:52 +08:00 · 10653 次点击
    这是一个创建于 4466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在之前的公司,是有中控机来做scp文件到各个部署服务器,现在的公司没中控的概念,都走本机,一般都是写脚本来做scp上传,如:

    for((i=1;i<=15;i++));do echo $i;scp xxx.xxx [email protected].$i:/tmp ; done

    或者是
    hosts="A B C D E F G H ..."
    for host in $hosts;do echo $host; scp xxx.xxx user@$host:/tmp ; done

    但是这样有个问题,就是在scp一个大的文件时,传完一个文件之后,才会接着在foreach下一个服务器,有时会耽误一些时间!

    不知各位有没有什么好的办法来解决!
    44 条回复    1970-01-01 08:00:00 +08:00
    blankyao
        1
    blankyao  
       2012-09-05 01:25:35 +08:00
    用rsync可以吧
    013231
        2
    013231  
       2012-09-05 01:36:46 +08:00
    Dropbox?
    wingoo
        3
    wingoo  
       2012-09-05 01:51:42 +08:00   ❤️ 1
    git?
    bigeagle
        4
    bigeagle  
       2012-09-05 02:16:29 +08:00
    eric_q
        5
    eric_q  
       2012-09-05 02:41:05 +08:00
    dsh?
    Cofyc
        7
    Cofyc  
       2012-09-05 09:21:55 +08:00
    fabric

    python 程序,可以批量并行执行远程命令和操作
    rivsen
        8
    rivsen  
       2012-09-05 09:38:02 +08:00
    ... git push 搞定,哪里那么麻烦。。。
    welsonla
        9
    welsonla  
       2012-09-05 09:41:47 +08:00
    scp,rsync,用scp比较方便一点
    skydiver
        10
    skydiver  
       2012-09-05 10:35:55 +08:00
    没法并行吗,多个进程同时传?
    ElmerZhang
        11
    ElmerZhang  
       2012-09-05 10:41:58 +08:00
    rsync
    gavingeng
        12
    gavingeng  
    OP
       2012-09-05 12:12:38 +08:00
    @Cofyc
    @ElmerZhang
    @welsonla
    python的那个稍后可以试下,在HZLUG上问过了,加 & 后台就就可以,早上尝试过了,是OK的
    for((i=1;i<=15;i++));do echo $i;scp xxx.xxx [email protected].$i:/tmp & done

    rsync ,在我的mac上还没装
    gavingeng
        13
    gavingeng  
    OP
       2012-09-05 12:24:11 +08:00
    @eric_q
    刚搜了下dsh,感觉跟cssh相似,但不能解决我的问题!
    服务器无法知道我的ip
    gavingeng
        14
    gavingeng  
    OP
       2012-09-05 12:39:12 +08:00
    @bigeagle
    pssh,这个没怎么听说过,先看看

    下面这个链接里有说
    http://linuxtoy.org/archives/dsh.html

    还有 pssh(比较成熟的项目) http://www.theether.org/pssh/
    erlyssh(Erlang实现的,支持交互式的shell,可cd切换目录) http://code.google.com/p/erlyssh/
    都是很好的分布式ssh shell工具。
    avenger
        15
    avenger  
       2012-09-05 12:41:40 +08:00   ❤️ 3
    rsync 绝对的推荐…… 部署男人袜我就是用的它,直接走 ssh 通道,下面是我用的参数,供参考:

    /usr/local/bin/rsync -avzP --exclude-from=rsync.exc . user@hostcom: -e "ssh -p 716" --delete

    推荐用 3.0 以上的版本,要自己编译,brew 里的版本好像比较旧
    shanks
        16
    shanks  
       2012-09-05 14:44:48 +08:00
    rsync推荐 +1
    自动化部署,文件夹同步
    clino
        17
    clino  
       2012-09-05 16:00:12 +08:00
    rsync +1
    如果要批量执行命令就用 pssh

    我维护的一堆服务器基本上是这两个搞定的,例如批量的工作可以写一些python脚本,用 rsync 同步到服务器上去,然后用 pssh 批量执行

    一些配置的同步也是用 rsync 来完成的
    Ranler
        18
    Ranler  
       2012-09-05 18:37:11 +08:00
    我用pdsh:pdsh -w exec:host[1-20] scp FILE %h:/path/

    可以并行处理
    fanweixiao
        19
    fanweixiao  
       2012-09-05 18:54:23 +08:00
    sftp试过吗?
    orzjerry
        20
    orzjerry  
       2012-09-10 22:04:16 +08:00
    推荐使用rsync或者统一使用svn然后统一由rsync发布,这样能杜绝一定的误操作。或者git
    gavingeng
        21
    gavingeng  
    OP
       2012-09-11 00:19:52 +08:00
    @orzjerry
    git/svn太麻烦了,不划算,而且传的也不是很快,再者如果是中控机的话还是不错的,其他就不好说了!

    不过现在用的比较多的是
    for((i=1;i<=15;i++));do echo $i;scp xxx.xxx [email protected].$i:/tmp & done
    然后通过cssh上去比较文件的md5来做 md5sum xxx.xxx
    fire9
        22
    fire9  
       2012-09-11 01:18:22 +08:00
    Capistrano+git+puppet
    lemolee
        23
    lemolee  
       2012-09-11 01:19:43 +08:00
    zhuf
        24
    zhuf  
       2012-09-11 12:28:08 +08:00
    scp?
    hyq
        25
    hyq  
       2012-09-11 12:59:39 +08:00   ❤️ 1
    用&后台运行或者用python多线程
    gavingeng
        26
    gavingeng  
    OP
       2012-09-16 23:23:46 +08:00
    @hyq
    python多线程?我记得是有个包,但忘了是哪个了
    fanweixiao
        27
    fanweixiao  
       2012-09-17 01:03:20 +08:00
    其实git很好,配合自己写hook,不用很复杂的架构就可以批量搞定这些:)
    sdslnmd
        28
    sdslnmd  
       2012-09-22 00:17:47 +08:00
    scp rsync 区别是?
    xhat
        29
    xhat  
       2012-09-22 00:59:10 +08:00
    一直用rsync,很方便。
    cabbala
        30
    cabbala  
       2012-09-22 01:26:24 +08:00
    其实用shell也能写多进程。。。经常给2000多台机器分发文件的路过,要是串行分发,会死人的
    Semon
        31
    Semon  
       2012-09-22 01:45:54 +08:00
    rsync +1
    tolbkni
        32
    tolbkni  
       2012-09-22 02:39:14 +08:00
    @fire9 Capistrano + rsync + puppet
    + 10086
    hzymyp
        33
    hzymyp  
       2012-09-22 03:21:30 +08:00
    fabric
    zava
        34
    zava  
       2012-09-23 20:54:42 +08:00
    rsync
    xinzhi
        35
    xinzhi  
       2012-09-23 21:03:37 +08:00
    scp -r 也是可以用的。
    mengzhuo
        36
    mengzhuo  
       2012-11-03 15:32:50 +08:00
    必须是fabric
    组合上git或者svn就更牛掰了
    zhairuo
        37
    zhairuo  
       2012-11-03 16:19:03 +08:00
    rsync +1
    wyx
        38
    wyx  
       2012-11-26 15:51:22 +08:00
    还是用scp,把scp这个部分封装成一个独立的函数,然后加一个&,可以用一个子进程来进行cp的事情
    voidman
        39
    voidman  
       2012-11-27 14:52:06 +08:00
    rsync +1
    Renylai
        40
    Renylai  
       2012-11-27 16:11:21 +08:00
    rsync +1
    flycn1985
        41
    flycn1985  
       2012-11-27 16:25:36 +08:00
    rsync + notify
    myhost123
        42
    myhost123  
       2012-11-28 13:04:19 +08:00
    rsync吧
    Kvm
        43
    Kvm  
       2012-11-28 16:36:12 +08:00
    scp带上-r参数就行了
    或者还是rsync吧。。。。。。
    huangmingyou
        44
    huangmingyou  
       2013-01-28 22:51:04 +08:00
    puppet
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6046 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 02:12 · PVG 10:12 · LAX 18:12 · JFK 21:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.