以下是一个 lsyncd.conf 的详细实例,用于将本地的一个目录实时同步到远程服务器的对应目录(这里以通过 SSH 方式同步为例,且假设你已经配置好了 SSH 免密登录等相关环境)。
基本配置结构说明
lsyncd.conf 文件通常采用 Lua 语言的配置风格,主要由配置块和相关的参数组成,整体结构清晰,便于定义不同的同步任务和规则。
以下是一份包含 lsyncd.conf 中常见可用设置及其详细解释的配置示例:
-- 全局设置部分 settings { -- 日志文件路径,记录同步过程中的详细信息 logfile = "/var/log/lsyncd.log", -- 状态文件路径,记录 lsyncd 的运行状态信息 statusFile = "/var/log/lsyncd-status.log", -- 状态文件的更新时间间隔(秒) statusInterval = 10, -- 监控文件系统变化的模式,常见值有 "CloseWrite"、"Modify" 等 -- "CloseWrite" 表示文件关闭且有写入操作时触发同步 -- "Modify" 表示文件内容修改时触发同步 inotifyMode = "CloseWrite", -- 最大同时运行的同步进程数量 maxProcesses = 1, -- 每次同步任务之间的最小延迟时间(秒) delay = 5, -- 失败重试次数 maxDelays = 10, -- 重试之间的延迟时间(秒) retry = 30, -- 启用颜色日志输出(仅在支持的终端中有效) color = true, -- 忽略某些文件或目录的变化 -- 可以使用正则表达式匹配 exclude = { "*.tmp", "/tmp/" }, -- 排除规则的正则表达式列表 excludeFrom = "/path/to/exclude_file", -- 包含规则的正则表达式列表,与排除规则相反 include = { "*.txt" }, -- 包含规则的正则表达式列表文件路径 includeFrom = "/path/to/include_file", -- 守护进程模式,设置为 true 时 lsyncd 会在后台运行 daemon = true, -- 启动延迟时间(秒),在 lsyncd 启动后等待一段时间再开始同步 startupDelay = 5, -- 日志级别,可选值有 "NORMAL"、"VERBOSE"、"DEBUG" 等 log = "NORMAL" } -- 同步任务部分 sync { -- 同步模式,这里使用 rsync 作为同步工具 default.rsync, -- 本地源目录 source = "/path/to/local/source", -- 远程目标目录,格式为 "用户@主机:目标路径" target = "user@remote_host:/path/to/remote/target", -- 当源目录中的文件被删除时,是否同时删除目标目录中的对应文件 delete = true, -- rsync 相关配置 rsync = { -- rsync 二进制文件的路径 binary = "/usr/bin/rsync", -- 以归档模式同步,保留文件的权限、时间戳等属性 archive = true, -- 同步时进行压缩,减少网络传输数据量 compress = true, -- 显示详细的同步信息 verbose = true, -- 递归同步目录 recursive = true, -- 不进行文件时间戳检查,强制同步所有文件 times = false, -- 不进行文件权限检查,保持目标文件权限不变 perms = false, -- 不进行文件属主和属组检查,保持目标文件属主和属组不变 owner = false, -- 不进行文件组检查,保持目标文件组不变 group = false, -- 排除某些文件或目录,可使用正则表达式 exclude = { "*.bak", "/logs/" }, -- 排除规则的正则表达式列表文件路径 excludeFrom = "/path/to/rsync_exclude_file", -- 包含规则的正则表达式列表,与排除规则相反 include = { "*.conf" }, -- 包含规则的正则表达式列表文件路径 includeFrom = "/path/to/rsync_include_file", -- 强制同步空目录 mkdir = true, -- 使用 SSH 进行远程连接 rsh = "/usr/bin/ssh", -- SSH 连接选项 rshArgs = { "-p", "22", "-i", "/path/to/private_key" } } }
详细解释
settings 部分
日志与状态相关
logfile:指定 lsyncd 记录详细同步信息的日志文件路径,方便后续查看同步过程中的错误和操作记录。
statusFile:用于记录 lsyncd 的运行状态信息,如同步任务的执行情况、上次同步时间等。
statusInterval:设置状态文件的更新时间间隔,单位为秒。
监控与同步控制
inotifyMode:定义监控文件系统变化的触发模式,不同模式决定了何时触发同步操作。
maxProcesses:限制同时运行的同步进程数量,避免资源过度占用。
delay:每次同步任务之间的最小延迟时间,防止频繁同步。
maxDelays:同步失败后的最大重试次数。
retry:每次重试之间的延迟时间,单位为秒。
文件过滤
exclude:一个列表,包含要忽略的文件或目录的正则表达式模式。
excludeFrom:指定一个文件,其中包含要忽略的文件或目录的正则表达式模式。
include:与 exclude 相反,指定要包含的文件或目录的正则表达式模式。
includeFrom:指定一个文件,其中包含要包含的文件或目录的正则表达式模式。
其他设置
color:启用颜色日志输出,使日志信息在支持的终端中更易读。
daemon:设置为 true 时,lsyncd 会以守护进程模式在后台运行。
startupDelay:lsyncd 启动后等待的时间,单位为秒,之后再开始同步任务。
log:设置日志级别,不同级别记录不同详细程度的信息。
sync 部分
基本同步信息
default.rsync:指定使用 rsync 作为同步工具。
source:本地要同步的源目录路径。
target:远程目标目录的地址,格式为 用户@主机:目标路径。
delete:设置为 true 时,当源目录中的文件被删除,目标目录中的对应文件也会被删除。
rsync 配置
binary:rsync 二进制文件的路径,确保 lsyncd 能找到并调用 rsync 命令。
archive:以归档模式同步,保留文件的权限、时间戳等重要属性。
compress:在同步过程中对数据进行压缩,减少网络传输的数据量。
verbose:显示详细的同步信息,方便调试和监控同步过程。
recursive:递归同步目录,确保目录下的所有子目录和文件都被同步。
times、perms、owner、group:分别控制是否同步文件的时间戳、权限、属主和属组信息。
exclude、excludeFrom、include、includeFrom:与 settings 部分的功能类似,但仅针对 rsync 同步。
mkdir:设置为 true 时,强制同步空目录。
rsh:指定使用 SSH 进行远程连接的命令路径。
rshArgs:SSH 连接的额外参数,如端口号、私钥文件路径等。
通过合理配置这些设置,可以满足不同场景下的文件同步需求。
实例配置内容
settings { logfile = "/var/log/lsyncd.log", -- 设置日志文件路径,方便查看同步相关的记录 statusFile = "/var/log/lsyncd-status.log", -- 记录状态信息的文件路径 inotifyMode = "CloseWrite", -- 监控文件变化的模式,这里表示文件关闭且有写入操作时触发同步 maxProcesses = 1, -- 最大同时运行的同步进程数量 } sync { default.rsync, -- 使用 rsync 作为同步工具 source = "/home/user/local_directory", -- 本地要同步的源目录,需根据实际情况修改路径 target = "user@remote_server:/home/user/remote_directory", -- 远程目标服务器及目录,修改为你的远程服务器相关信息 delete = true, -- 如果源目录中文件删除了,远程目标目录也对应删除 rsync = { binary = "/usr/bin/rsync", -- rsync 命令的路径,根据实际安装位置调整 archive = true, -- 以归档模式同步,保留文件权限等属性 compress = true, -- 同步时进行压缩,加快传输速度(适用于网络传输情况) verbose = true, -- 显示详细的同步信息到日志中 }, }
各部分详细解释
settings 配置块:
logfile:指定了日志文件的存放位置,在同步过程中出现问题或者想查看详细的同步操作记录时,可以查看这个日志文件内容,有助于排查问题和了解同步的执行情况。
statusFile:用于记录同步任务的状态信息,比如每次同步的时间、是否成功等简略情况,方便快速知晓整体同步的历史状态。
inotifyMode:定义了监控本地文件系统变化的触发条件,CloseWrite 是比较常用的一种,表示当文件关闭且有写入操作时就认定文件有更新,进而触发同步任务。还有其他模式如 Modify(文件内容修改时触发)等可供选择,可根据实际需求来定。
maxProcesses:限制了同时运行的同步进程数量,这里设置为 1 表示一次只执行一个同步进程,避免过多同步任务同时进行对系统资源造成较大压力,也可以根据服务器性能等情况适当调整该值。
sync 配置块:
default.rsync:表明使用 rsync 作为默认的同步工具,lsyncd 支持多种同步工具,rsync 因其高效、功能丰富等特点而被广泛应用于这种文件同步场景。
source:明确了本地要进行同步的源目录,需要准确填写实际的本地目录路径,确保是想要同步的正确文件夹。
target:指定了远程服务器以及对应的目标目录,格式为 用户名@远程服务器地址:远程目录路径,要将其中的相关信息替换成你真实的远程服务器登录信息和目标目录路径。
delete:设置为 true 时,如果在源目录中某个文件被删除了,那么在远程目标目录中对应的文件也会被删除,保持两边目录结构的一致性;若设置为 false,则源目录删除文件时,远程目录的文件不会被删除,可能会造成远程目录存在多余文件的情况,可根据业务需求决定是否开启该功能。
rsync 子配置块:
binary:指出 rsync 命令所在的路径,不同系统安装位置可能不同,需根据实际安装情况准确填写,确保 lsyncd 能调用到 rsync 命令来执行同步操作。
archive:以归档模式进行同步,这样可以保留文件的权限、所有者、时间戳等属性,使得同步后的文件在远程端和本地端的这些文件属性尽可能一致,适用于对文件完整性、权限要求较高的场景。
compress:开启压缩功能,在同步过程中会对传输的数据进行压缩,尤其在网络带宽有限的情况下,可以有效减少传输的数据量,加快同步速度,不过会增加一定的 CPU 资源消耗用于压缩和解压缩操作。
verbose:设置为 true 后,会在日志文件中显示详细的同步操作信息,比如同步了哪些文件、文件大小等,方便了解每次同步的具体情况,便于调试和查看同步效果。
你可以根据自己的实际同步需求,比如要同步的目录、同步的目标服务器、监控模式以及 rsync 的各项参数等,对上述实例进行修改和调整,从而实现高效准确的文件同步任务。
其他常见场景拓展示例
多个同步任务配置:
如果需要同时配置多个不同的同步任务,比如要将本地的两个不同目录分别同步到不同的远程服务器上,可以按照如下方式添加配置:
settings { -- 这里省略和上面相同的通用设置部分,和前面一样配置 logfile、statusFile 等参数 } sync { default.rsync, source = "/home/user/directory1", target = "user1@server1:/home/user1/target_directory1", -- 这里省略其他 rsync 相关参数,可按需配置,和前面示例类似 } sync { default.rsync, source = "/home/user/directory2", target = "user2@server2:/home/user2/target_directory2", -- 同样可按需配置 rsync 相关参数 }
这样就可以在同一个 lsyncd.conf 文件中定义两个独立的同步任务,分别进行不同的文件同步操作了。
基于不同触发条件的同步:
除了使用 CloseWrite 这种常见的触发条件,假如你想在文件被修改时就立即同步(不管文件是否关闭),可以这样配置 inotifyMode:
settings { logfile = "/var/log/lsyncd.log", statusFile = "/var/log/lsyncd-status.log", inotifyMode = "Modify", -- 修改为 Modify 模式 maxProcesses = 1, } -- 后续 sync 配置块等和前面示例类似,此处省略完整代码重复展示