使用 Lsyncd 实时同步目录内容

使用 Lsyncd 实时同步目录内容

周五 3月 29 2024
1221 字 · 6 分钟
未分配分类 未分配标签

Lsyncd(Live Syncing Daemon)是一款轻量级的目录实时同步工具,基于 Linux 内核的 inotify 机制监听文件系统变化,并通过 rsync 将变更自动推送到目标目录或远程主机,无需手动触发,适合本地目录镜像、多节点文件同步等场景。

适用系统:Ubuntu 20.04 LTS 及以上
核心依赖inotify(内核模块,通常已内置) · rsync(会随 Lsyncd 自动安装)


一、安装

安装 Lsyncd

通过 apt 直接安装,-y 参数跳过确认提示:

Terminal window
sudo apt install lsyncd -y

安装完成后,验证版本号以确认安装成功:

Terminal window
lsyncd --version

Lsyncd 依赖 rsync 执行实际的文件传输。若系统中尚未安装 rsync,apt 会在安装 Lsyncd 时自动一并安装。


二、配置

2.1 创建配置与日志目录

Lsyncd 默认不会自动创建配置目录和日志目录,需要提前手动建立:

Terminal window
# 存放配置文件
sudo mkdir /etc/lsyncd
# 存放运行日志与状态文件
sudo mkdir -p /var/log/lsyncd/

使用 -p 参数可避免父级目录不存在时报错,建议养成习惯。

2.2 编写配置文件

Lsyncd 使用 Lua 语法编写配置文件,这使得配置具备一定的编程灵活性,例如可以通过循环动态定义多个同步任务。

创建主配置文件:

Terminal window
sudo nano /etc/lsyncd/lsyncd.conf.lua

写入以下基础配置:

-- 全局设置
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
statusInterval = 20, -- 状态文件更新间隔(秒)
nodaemon = false -- false = 后台守护进程模式
}
-- 同步任务(可定义多个 sync 块)
sync {
default.rsync,
source = "/etc/", -- 监听的源目录
target = "/mnt" -- 同步目标(本地路径或远程地址)
}

完成后按 Ctrl+X,再按 Y 确认保存并退出。

全局配置项说明
配置项类型说明
logfilestring运行日志路径,记录每次同步事件的详细信息
statusFilestring状态文件路径,记录当前同步队列的实时状态
statusIntervalnumber状态文件刷新频率,单位为秒,默认 10
nodaemonbooleantrue 为前台运行(调试用),false 为后台守护进程模式
同步任务配置项说明
配置项说明
default.rsync使用内置的 rsync 同步模式,适合本地或基于 SSH 的远程同步
source监听变化的源目录路径(末尾加 / 表示同步目录内容而非目录本身)
target同步目标,支持本地路径或 user@host:/path 格式的远程地址

💡 远程同步提示target 填写远程地址时,格式为 user@remote_host:/target/path,Lsyncd 会通过 SSH 调用远程的 rsync。需要提前在源主机上配置好对目标主机的 SSH 免密登录,否则同步进程会因等待密码输入而阻塞。

⚠️ 注意source 路径末尾的 / 含义与 rsync 一致——/etc/ 表示同步 /etc 目录下的内容,/etc 则会将整个 etc 目录本身复制到目标路径下。


三、服务管理

3.1 启动并启用服务

通过 systemd 管理 Lsyncd 服务的生命周期:

Terminal window
# 启动 Lsyncd 服务
sudo systemctl start lsyncd
# 设置开机自启(系统重启后自动恢复同步)
sudo systemctl enable lsyncd
# 查看当前运行状态
sudo systemctl status lsyncd

服务正常运行时,状态输出中会包含:

Active: active (running)

3.2 常用管理命令

操作命令
启动服务sudo systemctl start lsyncd
停止服务sudo systemctl stop lsyncd
重启服务sudo systemctl restart lsyncd
重载配置(不中断同步)sudo systemctl reload lsyncd
取消开机自启sudo systemctl disable lsyncd

修改配置文件后,执行 sudo systemctl restart lsyncd 使新配置生效。


四、日志与监控

4.1 实时查看日志

Lsyncd 将所有同步事件记录到日志文件中,可通过 tail -f 实时跟踪:

Terminal window
# 实时追踪同步事件日志
tail -f /var/log/lsyncd/lsyncd.log
# 实时查看同步队列状态
tail -f /var/log/lsyncd/lsyncd.status
两个日志文件的区别
文件内容适用场景
lsyncd.log记录每个文件的同步事件(新增、修改、删除)及错误信息排查具体文件的同步异常
lsyncd.status显示当前待处理的同步队列与任务统计判断同步是否存在积压或延迟

4.2 排查常见问题

同步未触发:检查源目录路径是否正确,以及 inotify 的监听上限是否不足。可通过以下命令临时提高上限:

Terminal window
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches

远程同步失败:先手动测试 SSH 连接和 rsync 是否正常:

Terminal window
rsync -avz /source/path/ user@remote_host:/target/path/

查看详细错误:将配置中 nodaemon 临时改为 true,前台运行可以直接在终端看到完整的错误输出。


参考资料


Thanks for reading!

使用 Lsyncd 实时同步目录内容

周五 3月 29 2024
1221 字 · 6 分钟
未分配分类 未分配标签

© bayview | CC BY-NC-SA 4.0