首页 > 其他 > 详细

通过expect执行scp,传输文件不完整的解决方法

时间:2015-07-16 19:56:28      阅读:470      评论:0      收藏:0      [点我收藏+]

写了一个脚本来传输文件,类似于这样:

sendsystem(){
expect -c "
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}


sendsysaux(){
expect -c "
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/sysaux01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}

结果:

spawn scp /home/oracle/std_control01.ctl oracle@192.168.134.134:/oracle/oradata/standby/std_control01.ctl
oracle@192.168.134.134‘s password: 
std_control01.ctl                                                                               100% 9520KB   9.3MB/s   00:00    
spawn scp /oracle/oradata/orcl/system01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
system01.dbf                                                                                     92%  646MB  33.9MB/s   00:01 ETA
spawn scp /oracle/oradata/orcl/sysaux01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
sysaux01.dbf                                                                                    100%  600MB  31.6MB/s   00:19    
spawn scp /oracle/oradata/orcl/temp01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
temp01.dbf                                                                                      100%  200MB  66.7MB/s   00:03    
spawn scp /oracle/oradata/orcl/undotbs01.dbf oracle@192.168.134.134:/oracle/oradata/standby/
oracle@192.168.134.134‘s password: 
undotbs01.dbf                                                                                   100%  200MB  40.0MB/s   00:05 

system01.dbf没传完就不传了
又试了几次发现偶尔其他文件也会传不完就不传了

最后发现是因为expect默认timeout为30S
手动添加set timeout -1设置超时时间为无穷大,问题解决

sendsystem(){
expect -c "
           set timeout -1
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf oracle@$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

通过expect执行scp,传输文件不完整的解决方法

原文:http://blog.csdn.net/ashic/article/details/46914589

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!