最近因为业务需要,与第三方数据厂商做数据对接,接口方式协定为 FTP传输 ,说说我过程中的dan teng 经历。

开始准备用 lftp mirror 的方式镜像的方式同步数据,由于对方提供的日志文件超级大(一个小时100G),且对方接口本地保存了2天的数据,mirror 镜像太牺牲本地磁盘空间了(PS:mirror 貌似可以设置参数-x RX 忽略部分文件,由于项目时间比较近,楼主没有仔细研究,此楼不做详谈),后面果断采用mget 的方式按小时文件。

第一阶段:采用 ftp 的 nlist 和 mget 同步数据

ftp -n -i<<EOF

open ftp-ip

user username passwd

bin
nlist *${TIMESTAMP}* file_${TIMESTAMP}.log
mget *$TIMESTAMP*
bye
EOF

循环处理文件时,总会提示部分文件不存在,查看日志发现 nlist 获得的文件列表数量确实大于真正mget 下来的文件。开始一直以为是接口那边在mget 文件时已经删除了部分文件,此过程dan teng 了很久,最后发现 ftp 的mget 在同步大量文件时(600个文件以上)会有遗漏文件的bug,少量文件不会出现这种情况。

第二阶段 :后面改用lftp 的mget ,问题解决,部分代码如下

lftp user:passwd@ip <<EOF

mget *$TIMESTAMP*
bye
EOF

注:lftp 没有nlist 函数,需要的话可以 mget 后 本地 find 文件列表,效果一样

04-27 19:27