expect实现sftp文件同步

2019-02-28  本文已影响0人  朴本无名

工作中突然遇到一个问题:文件同步接口同步的数据不全。
现象如下(上图为ftp服务器,下图为本机):


ftp服务器.png
本机.png

对比分析发现,不是每天的数据都有问题,偶尔才会出现。
对脚本log日志进行分析


log.png
发现,第二个文件只完成了79%的下载。
深入代码分析,发现原因如下:
expect有默认响应(网查是30s),所以如果操作了30s的话,就会自动断开链接。
可以进行自定义设置如:

set timeout -1 //无穷大
set timeout 600 //600s
修改代码,上传一个大文件进行测试,完成100%同步,问题解决。

附录 (sftp同步脚本):

in/bash

export PATH=xx
LOG_FILE="/xx/info.log"
data=date +%Y%m%d

"{LOG_FILE}" exec &>>{LOG_FILE}

!/usr/bin/sh

/usr/bin/expect <<-EOF
set timeout 600
spawn sftp 用户名@IP
expect {
"(yes/no)?" {send "yes\r"; expect_continue}
"password:" {send "xx\r"}
}
expect "sftp>"
send "cd /zygljk/zygl_info/qcd_yf\r"
expect "sftp>"
send "lcd /oss/python/getContactInfo/hx\r"
expect "sftp>"

上一篇 下一篇

猜你喜欢

热点阅读