最近因为业务需要,与第三方数据厂商做数据对接,接口方式协定为 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 文件列表,效果一样