云的博客 logo 云的博客

知识分享 经验总结 技术前沿

  1. Home
  2. Posts
  3. 使用 Lsyncd 实时同步目录内容

使用 Lsyncd 实时同步目录内容

Mar 29, 2024 bayview

ChatGPT Image 2026年1月3日 14_49_35.png

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,前台运行可以直接在终端看到完整的错误输出。


参考资料

  • How To Synchronize Directories Using Lsyncd on Ubuntu — HowtoForge
  • Lsyncd 官方文档 — GitHub Wiki
  • inotify 内核文档 — Linux man-pages

Table of Contents

  • 一、安装
    • 安装 Lsyncd
  • 二、配置
    • 2.1 创建配置与日志目录
    • 2.2 编写配置文件
  • 三、服务管理
    • 3.1 启动并启用服务
    • 3.2 常用管理命令
  • 四、日志与监控
    • 4.1 实时查看日志
    • 4.2 排查常见问题
  • 参考资料

Recent Posts

  • 用python演示A星算法 Feb 1, 2026
  • 手动部署 Mattermost 到 Ubuntu Server 20.04 Apr 17, 2025
  • 在 Ubuntu Server 上部署 FTP 服务 Jul 9, 2024
  • LFS安装笔记本无线网卡驱动需要注意的几点问题 Jun 30, 2024
  • 为Typecho代码块添加一键复制按钮 Jun 28, 2024
在Linux中删除EFI引导分区已弃用条目 →
Powered by Hugo & Explore Theme.