
Lsyncd(Live Syncing Daemon)是一款轻量级的目录实时同步工具,基于 Linux 内核的
inotify机制监听文件系统变化,并通过rsync将变更自动推送到目标目录或远程主机,无需手动触发,适合本地目录镜像、多节点文件同步等场景。
适用系统:Ubuntu 20.04 LTS 及以上
核心依赖:inotify(内核模块,通常已内置) · rsync(会随 Lsyncd 自动安装)
一、安装
安装 Lsyncd
通过 apt 直接安装,-y 参数跳过确认提示:
sudo apt install lsyncd -y
安装完成后,验证版本号以确认安装成功:
lsyncd --version
Lsyncd 依赖
rsync执行实际的文件传输。若系统中尚未安装 rsync,apt 会在安装 Lsyncd 时自动一并安装。
二、配置
2.1 创建配置与日志目录
Lsyncd 默认不会自动创建配置目录和日志目录,需要提前手动建立:
# 存放配置文件
sudo mkdir /etc/lsyncd
# 存放运行日志与状态文件
sudo mkdir -p /var/log/lsyncd/
使用
-p参数可避免父级目录不存在时报错,建议养成习惯。
2.2 编写配置文件
Lsyncd 使用 Lua 语法编写配置文件,这使得配置具备一定的编程灵活性,例如可以通过循环动态定义多个同步任务。
创建主配置文件:
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 确认保存并退出。
全局配置项说明
| 配置项 | 类型 | 说明 |
|---|---|---|
logfile |
string | 运行日志路径,记录每次同步事件的详细信息 |
statusFile |
string | 状态文件路径,记录当前同步队列的实时状态 |
statusInterval |
number | 状态文件刷新频率,单位为秒,默认 10 |
nodaemon |
boolean | true 为前台运行(调试用),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 服务的生命周期:
# 启动 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 实时跟踪:
# 实时追踪同步事件日志
tail -f /var/log/lsyncd/lsyncd.log
# 实时查看同步队列状态
tail -f /var/log/lsyncd/lsyncd.status
两个日志文件的区别
| 文件 | 内容 | 适用场景 |
|---|---|---|
lsyncd.log |
记录每个文件的同步事件(新增、修改、删除)及错误信息 | 排查具体文件的同步异常 |
lsyncd.status |
显示当前待处理的同步队列与任务统计 | 判断同步是否存在积压或延迟 |
4.2 排查常见问题
同步未触发:检查源目录路径是否正确,以及 inotify 的监听上限是否不足。可通过以下命令临时提高上限:
echo 524288 | sudo tee /proc/sys/fs/inotify/max_user_watches
远程同步失败:先手动测试 SSH 连接和 rsync 是否正常:
rsync -avz /source/path/ user@remote_host:/target/path/
查看详细错误:将配置中 nodaemon 临时改为 true,前台运行可以直接在终端看到完整的错误输出。