linux expect 自动交互 执行命令 超时 不完整 中断 解决方法

使用 expec t自动交互执行命令时,默认超时timeout为30s
手动添加set timeout -1设置 超时时间为无穷大 就可以执行完命令了

通过expect执行scp,传输文件不完整

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

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 ;
       "
}

 

 

 

 

 

 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值