免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4294 | 回复: 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


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

本版积分规则 发表回复

SACC2019中国系统架构师大会

【数字转型 架构演进】SACC2019中国系统架构师大会
2019年10月31日~11月2日第11届中国系统架构师大会(SACC2019)将在北京隆重召开。四大主线并行的演讲模式,1个主会场、20个技术专场、超千人参与的会议规模,100+来自互联网、金融、制造业、电商等领域的嘉宾阵容,将为广大参会者提供一场最具价值的技术交流盛会。




----------------------------------------

大会官网>>
  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP