perl scp 进程同步问题

众星烁 发布于 2014/10/22 22:49
阅读 181
收藏 0
各位大侠,有个问题请教:
需求:从A服务器拷贝数据文件到B服务器,双方均为linux 系统,需要用户名密码登陆验证
使用工具 Linux scp + Perl 语言 调用了Expect 包用来登陆目标系统。 
程序实现过程:1,在拷贝完成后,写本地日志,其中包括 拷贝完成度,文件大小等。
         2,读取日志,如果拷贝完成度为100%,则是成功,否则为失败。
 
程序实现如下:
my $scp_cmd = "scp -r $source_path ${trg_username}\@${trg_ip}:${trg_path}";
print "$scp_cmd\n";
my $exp = Expect->new;
        $exp->spawn($scp_cmd) or die "Cannot spawn $scp_cmd: $!\n";
        $exp->log_file("${source_path}.log", "w");  
        $exp->expect($timeout,[qr/password:/,sub{$exp->send("$trg_passwd\n");exp_continue;}]);
        system("chmod 777 ${source_path}.log");
        unless (open (LOGFILE,"${source_path}.log")) {die ("cannot open input file ${source_path}.log $!\n");}
        my $log = <LOGFILE>;
        close LOGFILE;
        print $log ###有错误
        return $returnCode;

问题如下:
print $log ###有错误,在打印的时候总是空白,但程序运行完毕时候,可以看到其中是有日志记录的,而且是正常的
我怀疑是$exp->spawn($scp_cmd) 这条语句调用时候,调用了linux的scp,因此在Linux又另开启了一个进程
并没有进行进程挂起,导致进程不同步,在scp在进行拷贝数据的时候,Perl程序已经开始向下执行了。
请问,哪位大侠写做过类似的程序??不是perl的也可以,给些宝贵的建议吧,谢谢各位啦。
 
加载中
返回顶部
顶部