免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4379 | 回复: 4

Net::SCP::Expect无法传大文件的问题【已解决】 [复制链接]

论坛徽章:
0
发表于 2009-12-14 22:07 |显示全部楼层
各位高手请帮忙看一下,小弟用NET::SCP::Expect写的自动传送文件的脚本,老是不能传送大文件,传到310-320M的时候就出错了

#!/usr/bin/perl

use Net::SCP::Expect;

sub scp_file {

   my $host = "10.0.0.1";

   my $scpe = Net::SCP::Expect->new(auto_yes=>1,timeout=>10,port=>22,host=>$host);
   $scpe->login("root", 'password');
   $scpe->scp(":/data1/1.gz","/data/");

}


错误日志如下:
Waiting for new data (unlimited seconds)...
spawn id(5): new data.
spawn id(5): read 1024 byte(s).
spawn id(5): Does `...                        |  21MB |  21MB/s | ETA: 00:02:14 |   0%\r1.gz                                  |  42MB |  21MB/s | ETA: 00:02:13 |   1%\r1.gz                                  |  63MB |  21MB/s | ETA: 00:02:11 |   2%\r1.gz                                  |  87MB |  22MB/s | ETA: 00:02:06 |   3%\r1.gz                                  | 111MB |  22MB/s | ETA: 00:02:02 |   3%\r1.gz                                  | 135MB |  22MB/s | ETA: 00:02:00 |   4%\r1.gz                                  | 158MB |  23MB/s | ETA: 00:01:59 |   5%\r1.gz                                  | 182MB |  23MB/s | ETA: 00:01:57 |   6%\r1.gz                                  | 205MB |  23MB/s | ETA: 00:01:55 |   7%\r1.gz                                  | 230MB |  23MB/s | ETA: 00:01:54 |   8%\r1.gz                                  | 254MB |  23MB/s | ETA: 00:01:52 |   8%\r1.gz                                  | 278MB |  23MB/s | ETA: 00:01:50 |   9%\r1.gz                                  | 302MB |  23MB/s | ETA: 00:01:49 |  '
match:
  pattern #1: -re `(?-xism:[Pp]ass.*)'? No.
  pattern #2: -re `(?-xism:\w+.*)'? YES!!
    Before match string: `\r\r\n\r'
    Match string: `1.gz                                  |  21MB |  21MB/s | ETA: 00:02:14 |   0%\r1.gz                                  |  42MB |  21MB/s | ETA: 00:02:13 |   1%\r1.gz                                  |  63MB |  21MB/s | ETA: 00:02:11 |   2%\r1.gz                                  |  87MB |  22MB/s | ETA: 00:02:06 |   3%\r1.gz                                  | 111MB |  22MB/s | ETA: 00:02:02 |   3%\r1.gz                                  | 135MB |  22MB/s | ETA: 00:02:00 |   4%\r1.gz                                  | 158MB |  23MB/s | ETA: 00:01:59 |   5%\r1.gz                                  | 182MB |  23MB/s | ETA: 00:01:57 |   6%\r1.gz                                  | 205MB |  23MB/s | ETA: 00:01:55 |   7%\r1.gz                                  | 230MB |  23MB/s | ETA: 00:01:54 |   8%\r1.gz                                  | 254MB |  23MB/s | ETA: 00:01:52 |   8%\r1.gz                                  | 278MB |  23MB/s | ETA: 00:01:50 |   9%\r1.gz                                  | 302MB |  23MB/s | ETA: 00:01:49 |  '
    After match string: `'
    Matchlist: ()
Calling hook CODE(0x8166b44)...
1.gz                                  | 302MB |  23MB/s | ETA: 00:01:49 |   at /home/bakfile/bin/../lib/5.8.8/Expect.pm line 733
Closing spawn id(5).
at /home/bakfile/bin/../lib/5.8.8/Expect.pm line 1386
        Expect::hard_close('Expect=GLOB(0x8641c7c)') called at /home/bakfile/bin/../lib/5.8.8/Expect.pm line 1575
        Expect:ESTROY('Expect=GLOB(0x8641c7c)') called at ./bakfile.pl line 0
        eval {...} called at ./bak_file.pl line 0
spawn id(5) closed.
Pid 24838 of spawn id(5) terminated, Status: 0x01

[ 本帖最后由 dqchen0004 于 2009-12-14 22:50 编辑 ]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
发表于 2009-12-14 22:09 |显示全部楼层
用 Net::OpenSSH 试试。

论坛徽章:
0
发表于 2009-12-14 22:47 |显示全部楼层
问题已经查到了
在5.8.8/Net/SCP/Expect.pm 第182行
$flags .= "-q";  # Always pass this option (no progress meter)

源码中这里使用的是小写的-q,我用的是suse10的机器,查看了scp的帮助后,发现scp的静默模式在suse10中是使用大写的-Q,这样的差异导致了程序在执行的过程中不断的产生输入,Expect自然也就不断的去匹配导致出错,将此处修改后问题解决,传了2G的文件都没问题

论坛徽章:
0
发表于 2009-12-15 02:54 |显示全部楼层
很好的经验啊,学习了

论坛徽章:
0
发表于 2012-01-09 17:07 |显示全部楼层
回复 1# dqchen0004


    你好,你的日志是在哪里呀,我是个菜鸟,也写了个脚本,但是看不到日志,也不知道在哪里调试,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会 限时8.5折

【架构革新 高效可控】2020年8月17日~19日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP