使用lsyncd同步目录
在本地对两个目录进行同步
安装依赖
sudo apt update
sudo apt install lsyncd rsync -y
创建目录与日志文件
手动创建日志文件并赋予权限,防止程序因无法写入日志而崩溃
# 1. 创建配置与日志目录
sudo mkdir -p /etc/lsyncd
sudo mkdir -p /var/log/lsyncd
# 2. 手动创建日志文件
sudo touch /var/log/lsyncd/lsyncd.log
sudo touch /var/log/lsyncd/lsyncd.status
# 3. 赋予权限(确保 lsyncd 有权写入)
sudo chmod -R 755 /var/log/lsyncd
调高内核监控上限
实时同步依赖
inotify,Linux 默认上限极低(8192),需要调高
# 永久写入配置文件
echo "fs.inotify.max_user_watches=524288" | sudo tee -a /etc/sysctl.conf
# 立即应用
sudo sysctl -p
编写配置文件
sudo nano /etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
nodaemon = false, -- 后台运行
insist = true, -- 持续重试
}
sync {
default.rsync,
-- 注意:源目录末尾不要斜杠,会同步文件夹本身
source = "/var/www/html/files",
-- 目标目录
target = "/mnt/backup/destination/",
rsync = {
binary = "/usr/bin/rsync",
archive = true, -- 归档模式 (-a)
verbose = true, -- 详细模式 (-v)
_extra = {"--delete"} -- 同步删除 (--delete)
}
}
或
## 不同步指定文件,目标端删除不影响源端
####
```
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status",
nodaemon = false,
insist = true,
}
sync {
default.rsync,
source = "/var/www/html/files",
target = "/mnt/backup/destination/",
-- 【排除规则区域】
-- 启用方法:删除行首的 -- 符号。注意每行末尾要有逗号。
exclude = {
-- 1. 排除特定文件 (精确匹配)
-- "1.txt",
-- "important_config.php",
-- 2. 排除特定类型 (后缀匹配)
-- "*.log",
-- "*.tmp",
-- 3. 排除特定文件夹
-- "temp/",
-- "cache/",
},
rsync = {
binary = "/usr/bin/rsync",
archive = true,
verbose = true,
-- 保持单向镜像:源端删,目标删;目标删,源端不删。
_extra = {"--delete"}
}
}
```
启动服务
文件在标准位置,直接启动服务即可,无需修改 Systemd 脚本
# 1. 启动服务
sudo systemctl start lsyncd
# 2. 设置开机自动启动
sudo systemctl enable lsyncd
# 3. 检查状态
sudo systemctl status lsyncd
操作
修改配置文件
sudo nano /etc/lsyncd/lsyncd.conf.lua
sudo systemctl restart lsyncd
查看同步日志
#实时同步日志
tail -f /var/log/lsyncd/lsyncd.log
#查看同步报告
cat /var/log/lsyncd/lsyncd.status