方案一:定时同步
此方案通过系统的定时任务,每隔一段时间检查并同步FTP上的新文件。
1、安装工具
在终端执行:
yum install -y lftp
2、编写同步脚本
创建脚本文件,例如 /data/sync_ftp.sh,并编辑:
#!/bin/bash
FTP_USER="your_username"
FTP_PASS="your_password"
FTP_HOST="ftp.example.com"
REMOTE_DIR="/remote/path"
LOCAL_DIR="/local/path"
# 使用lftp进行镜像同步,参数说明:
# --delete:删除本地多余文件(保持严格一致)
# --only-newer:只下载更新的文件(增量同步)
# --verbose:输出详细信息,便于调试
#lftp -e "set ftp:ssl-allow no; open ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}; mirror --delete --only-newer --verbose \"${REMOTE_DIR}\" \"${LOCAL_DIR}\"; quit"
lftp -e "set ftp:ssl-allow no; open ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}; mirror --only-newer --verbose \"${REMOTE_DIR}\" \"${LOCAL_DIR}\"; quit"
保存后赋予执行权限
chmod +x /data/sync_ftp.sh
3、配置定时任务
使用 crontab -e 命令编辑定时任务。例如,设置每5分钟执行一次同步:
*/5 * * * * /data/sync_ftp.sh >> /tmp/sync_ftp.log 2>&1
这会将脚本输出追加到日志文件,便于排查问题。
方案二:准实时同步
此方案结合了高频轮询和本地实时同步。它不直接监控远程FTP,而是通过一个循环脚本将FTP文件快速拉到本地“暂存区”,然后由lsyncd监控暂存区,并实时同步到最终的目标目录。
1、安装必要工具
yum install -y lftp
yum install -y epel-release
yum install -y lsyncd
2、第一步:创建高频拉取脚本
创建一个脚本,例如 /data/sync_ftp.sh,让它循环执行(比如每30秒一次)
#!/bin/bash
FTP_USER="your_username"
FTP_PASS="your_password"
FTP_HOST="ftp.example.com"
REMOTE_DIR="/remote/path"
# 这是“暂存区”,lsyncd将监控此目录
STAGING_DIR="/local/staging"
while true; do
# 使用lftp拉取文件到暂存区
lftp -e "set ftp:ssl-allow no; open ftp://${FTP_USER}:${FTP_PASS}@${FTP_HOST}; mirror --only-newer --verbose \"${REMOTE_DIR}\" \"${STAGING_DIR}\"; quit"
# 设置轮询间隔(秒)
sleep 30
done
让它以后台方式运行:
chmod +x /data/sync_ftp.sh
nohup /data/sync_ftp.sh > /tmp/fetch.log 2>&1 &
3、第二步:配置Lsyncd实时同步
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
-- 设置监控事件聚合的延迟时间(秒)
delay = 2
}
sync {
default.rsync,
-- 源目录:上面的“暂存区”
source = "/local/staging",
-- 目标目录:最终存放文件的目录
target = "/local/final_target",
rsync = {
archive = true,
compress = false
}
}
启动服务并设置开机自启:
systemctl start lsyncd
systemctl enable lsyncd
tail -f /var/log/lsyncd/lsyncd.log # 查看实时日志
评论区