目 录CONTENT

文章目录

实时同步FTP文件

ZERO
2025-12-09 / 0 评论 / 0 点赞 / 4 阅读 / 0 字

方案一:定时同步

此方案通过系统的定时任务,每隔一段时间检查并同步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  # 查看实时日志
0

评论区