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

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

sendsystem(){
expect -c "
           spawn scp $ORACLE_BASE/oradata/$ORACLE_SID/system01.dbf [email protected]$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 [email protected]$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 [email protected]:/oracle/oradata/standby/
[email protected]‘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 [email protected]:/oracle/oradata/standby/
[email protected]‘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 [email protected]$S_IP:$ORACLE_BASE/oradata/standby/
           expect {
               yes/no { send \"yes\r\"; exp_continue }
               *assword* { send \"oracle\r\" }
           };
           expect 100%
           expect eof ;
       "
}

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

时间: 2024-10-18 19:48:03

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

(转) SQL Server中 ldf 文件过大的解决方法

原文地址:http://blog.itpub.net/35489/viewspace-616459/ 在SQL Server中经常遇到事务日志变大的情况,除了将数据库设置为“自动收缩”外,还可以使用下面的SQL命令进行快速清除数据库中的事务日志,命令如下:  - 第一步:清空日志  DUMP TRANSACTION   databasename   WITH   NO_LOG  -- 第二步:截断事务日志  BACKUP LOG   databasename   WITH   NO_LOG  -

执行游戏时出现0xc000007b错误的解决方法

如图,这个错误使无数玩家烦恼. 出现这个错误,可能是硬件的问题,也可能是软件的问题.可是,因为硬件引起该问题的概率非常小,而且除了更换硬件之外没有更好的解决方法,因此本文将具体介绍怎样通过软件解决此问题,这也是大家最关心的. 大致介绍一下这个错误是怎样发生的.这个错误的本意是提示内存错误,可是通常情况下并非内存存在问题,而是因为软件的问题产生了这个错误.到底是什么软件的问题呢?答案是DirectX,而且多数情况下是DirectX 9.0的问题. 或许大家会问了:我玩的游戏都有DirextX 11

python程序在命令行执行提示ModuleNotFoundError: No module named 'XXX' 解决方法

原文链接:https://www.cnblogs.com/dreamyu/p/7889959.html 在ide中执行python程序,都已经在默认的项目路径中,所以直接执行是没有问题的.但是在cmd中执行程序,所在路径是python的搜索路径,如果涉及到import引用就会报类似ImportError: No module named xxx这样的错误,解决方法: 在报错的模块中添加: import sys import os curPath = os.path.abspath(os.path

上传文件,提示文件不存在的解决方法

在做公司的一个项目中,需要上传文件,使用的是AjaxUpload JS组件,选择完文件后,发送请求到指定接口,随即返回服务器上文件的相对路径,然后PHP再做其他工作(这不是重点) 处理上传的PHP程序,限制其文件大小为20M php.ini中 post_max_size 20M upload_max_filesize 20M memory_limit 256M ngint.conf中 client_max_body_size 518M 上传20M以下的文件,没有问题,但是,例如上传80M的文件,

mono 3.4.0 make install的时候出现"找不到 Microsoft.Portable.Common.targets 文件”的错误提示解决方法

如果在这时就进行配置安装Mono的话,会在make阶段得到一个“找不到 Microsoft.Portable.Common.targets 文件”的错误提示, 所以需要先进行如下处理: #> cd (mono安装路径的前缀)/mono-3.4.0/mcs/tools/xbuild/targets #> cp Microsoft.Portable.CSharp_4.0.targets Microsoft.Portable.Common.targets #> vim Microsoft.Po

转换到 COFF 期间失败: 文件无效或损坏 解决方法

转自csdn 终极解决方案:VS2010在经历一些更新后,建立Win32 Console Project时会出“error LNK1123” 错误,解决方案为将 项目|项目属性|配置属性|清单工具|输入和输出|嵌入清单 “是”改为“否”即可,但是没新建一个项目都要这样设置一次.在建立VS2010 Win32 Project项目时,按照上面解决方案依然发生了“error LNK1123”错误,经过上网查资料,解决方案为:第一步:与上相同.第二步:将 项目|项目属性|配置属性|连接器|清单文件|嵌入

VS2010中<无法打开包括文件:“iostream.h”:>错误解决方法

C/C++ code? 1 2 #include <iostream.h> 改为: C/C++ code? 1 2 #include <iostream> using namespace std; VS2010中<无法打开包括文件:"iostream.h":>错误解决方法

VS2013/2012 下无法打开 源 文件“stdafx.h”的解决方法

VS2013/2012下代码一写上去保存就报错了,下方提示无法打开 源 文件"stdafx.h" 如图: 百度了一下,对于VS2010有这样的方法可以解决: 在项目属性中展开C/C++,选择常规,在附加包含目录里加入"$(ProjectDir)" 大家可以看到在我的VS2013下完全没作用. 后来发现这样就成功了: 那个预编译头文件是自己就有的,我想VS2013/2012默认就包含了"stdafx.h"吧,所以不必再写一次 VS2013/2012

描述文件不匹配的解决方法

场景: 有时候当我们在做真机测试的时候,会出现这样的错误提示:, 这个错误就是说,可能你的项目之前用别的描述文件进行过测试,现在你用另外的描述文件给它做真机测试,但是文件记录的时上次测试的描述文件,所有当你使用新的描述文件测试的时候,提示你说找不到指定的描述文件. 解决方法: 1. 打开项目文件夹,找到工程文件( .xcodeproj 文件),选中 - > 右键 -> 显示包内容: 2. 在打开的包内容中,找到 project.pbxproj 文件,选中 - > 右键 -> 打开方