Shell脚本实战怎么监听特定目录的文件变动并实时通过rsync同步到灾备机

冷炫風刃

冷炫風刃

2026-07-28

308人浏览

原创

答案是使用inotifywait监听目录变动并精准触发rsync同步:脚本提取变更文件的最深一级目录,仅同步该子目录,避免全量同步;配合免密配置、日志分离、守护机制与充分验证,确保稳定高效。

shell脚本实战怎么监听特定目录的文件变动并实时通过rsync同步到灾备机

用 Shell 实现监听目录变动并实时 rsync 同步到灾备机,核心是 inotifywait + rsync 组合,配合后台常驻和事件精准触发。关键不在“一气呵成”,而在避免重复同步、控制粒度、防止事件风暴和保障稳定性。

基础环境准备与验证

确保两台机器都满足前提:

  • 生产机(源):内核 ≥ 2.6.13,已安装 inotify-toolsyum install -y inotify-tools)和 rsync
  • 灾备机(目标):运行 rsync --daemon 模式,配置好 /etc/rsyncd.conf 和密码文件(如 /etc/rsyncd.secrets),权限设为 600
  • 生产机需有免密访问灾备机的 rsync 权限(通过 rsync_passwd_file 指定,或使用 SSH 密钥对)
  • 确认网络互通,且灾备机 rsync 模块(如 [backup])已启用并允许生产机 IP 连接

监听+同步脚本(推荐最小粒度同步)

不建议监听整个大目录后全量 rsync —— 一次改 1 个文件就同步整个目录,效率极低。应提取变更路径,只同步受影响的最小单位(如某子目录)。

以下脚本监听 /data/www,当发生增删改时,解析出变更的最深一级目录(例如 /data/www/uploads/2026/07/abc.jpg → 同步 /data/www/uploads/2026/07/):

(保存为 /opt/bin/inotify-rsync.sh,赋予可执行权限)
#!/bin/bash
SRC="/data/www"
DST_MODULE="backup"           # 灾备机 rsync 模块名
DST_HOST="192.168.250.18"     # 灾备机 IP
RSYNC_USER="rsyncuser"
RSYNC_PASS="/etc/rsyncd/secrets"
<h1>切入源目录,保证 rsync -R 路径正确</h1><p>cd "$SRC" || exit 1</p><div class="aritcle_card flexRow artxards">
											<div class="artcardd flexRow">
												<a class="aritcle_card_img" rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版"><img
														src="https://img.php.cn/upload/manual/000/000/016/170693311554316.png" alt="Shell脚本编写基础 中文WORD版" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
												<div class="aritcle_card_info flexColumn">
													<a rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版" class="overflowclass">Shell脚本编写基础 中文WORD版</a>
													<p class="overflowclass">Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。Shell既是一种命令语言,又是一种程序设计语言。作为命令语言,它交互式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。它虽然不是Linux系统核心的一部分,但它调用了系统核心的大部分功能来执行程序、建立文件并以并行的方式协调各个程序的运行。因此,对于用户来说,shell是最重要的实用程序,深入了解和熟练掌握shell的特性极其使用方法,是用好Linux系统</p>
												</div>
												<a rel="nofollow" href="/xiazai/shouce/1785" title="Shell脚本编写基础 中文WORD版" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
												</a>
											</div>
										</div><h1>监听关键事件,排除临时文件和编辑器备份</h1><p>/usr/bin/inotifywait -mrq \
--format '%w%f %e' \
--event modify,create,delete,move,attrib,close_write \
--exclude '.(swp|swx|~)$' \
. | while read file event; do</p><h1>跳过空事件或无效路径</h1><p>[ -z "$file" ] && continue
[[ "$file" =~ ^/ ]] || continue</p><h1>提取变更发生的最深一级目录(如 /a/b/c/file → /a/b/c/)</h1><p>DIR=$(dirname "$file" | sed 's|^./||')</p><h1>若变更在根下(如 ./index.html),则同步整个 SRC</h1><p>[ "$DIR" = "." ] && DIR=""</p><h1>构造 rsync 源路径(带 trailing slash 保证内容复制)</h1><p>SYNC_SRC="${DIR:+$DIR/}"</p><h1>执行同步:-R 保留路径结构,--delete 删除目标端多余文件</h1><p>echo "[$(date '+%F %T')] Syncing $SYNC_SRC → $DST_HOST::$DST_MODULE" >> /var/log/inotify-rsync.log
export RSYNC_PASSWORD=$(cat "$RSYNC_PASS")
rsync -avzR --delete "$SYNC_SRC" "$RSYNC_USER@$DST_HOST::$DST_MODULE" 2>> /var/log/inotify-rsync.err
done</p>

后台持久运行与异常防护

脚本必须长期运行,同时防止单次失败阻塞后续事件:

  • nohup 启动,并重定向输出:
    nohup /opt/bin/inotify-rsync.sh > /dev/null 2>&1 &
  • 加入简单守护逻辑(可选):写个 wrapper 脚本,每 5 分钟检查进程是否存在,不存在则重启
  • 日志要分离:成功记录到 /var/log/inotify-rsync.log,错误单独进 .err,方便排查
  • 避免高频事件堆积:inotifywait 默认会缓冲事件,但若短时间大量操作(如解压千个文件),可在脚本开头加 sleep 0.1 防止 rsync 并发冲突

调试与上线前必做检查

别跳过验证环节:

  • 手动执行一次 rsync 命令,确认免密、模块名、路径、权限全部通
  • 先去掉 -q 和重定向,前台运行脚本,创建/修改/删除测试文件,看是否打印日志、是否触发 rsync
  • 检查灾备机目标目录权限,确保 rsync 用户有写入权;若用 daemon 模式,确认 read only = false 在对应模块中已设置
  • ps aux | grep inotifytail -f /var/log/inotify-rsync.log 实时观察状态

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

355

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

618

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

1216

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

429

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

324

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

190

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

1056

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

1871

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

323

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
尚观shell视频教程
尚观shell视频教程

共8课时 | 1.8万人学习

Linux开发视频教程
Linux开发视频教程

共18课时 | 4.5万人学习

Perl 入门教程
Perl 入门教程

共29课时 | 30.3万人学习