使用rsync及inotify实现两台Linux设备间的文件夹同步

一、背景

环境
由于业务需要,软件需要在CentOS 6.10 32位环境中进行编译。由于系统版本较老,无法实现使用vscode远程连接到CentOS上进行软件开发。为了仍能享受到vscode的便利,现借助SUSE作为vscode远程连接的开发环境,并将SUSE上的文件夹与CentOS服务器上的文件夹进行实时同步,需要编译时直接在CentOS服务器上对修改后的代码进行操作。

序号 机器角色 系统版本
1 编辑环境 Windows 10
2 开发环境 SUSE 15.2 64位
3 编译环境 CentOS 6.10 32位

二、实现

1. 安装rsync

CentOS 6.10和SLE 15.2均已自带rsync软件,可通过以下命令查询

rsync --version

可以看到当前安装的rsync版本为3.1.3
image

2. 安装inotify

SUSE 15.2系统中未安装inotify,可以使用以下命令进行安装

zypper install inotify-tools

3. 使用shell脚本后台运行保持文件夹同步

在自定义的路径下使用vim新建同步脚本

vim rsync_realTime.sh

在vim编辑页面按i键进入编辑模式,将以下内容粘贴到文件中

host=XXX.XXX.XXX.XXX               # 目标服务器的 IP 地址(备份服务器)
src=/home/用户名/src/               # 源服务器上要监控的备份目录(需要确保该目录存在)
des=/home/目标用户名/dest/          # 目标服务器上同步的目录路径,需要与目标服务器上的目录一致
user=用户名                         # 用于执行数据同步的用户名
inotifywait=/usr/bin/inotifywait   # inotifywait 命令的路径

# timefmt为生成日志的每条内容时间格式,需要配合 --format使用,%T即为时间所在的位置
$inotifywait -mrq --timefmt '%Y-%m-%d %H:%M:%S %a' --format '%T %w%f %e' -e modify,delete,create,attrib $src | while read files; do
  rsync -avH --timeout=100 $src $user@$host:$des
  echo "${files} was rsynced" >> "/home/用户名/自定义日志路径,如logForSync/rsync_$(date +%Y%m%d).log" 2>&1
done

按esc键后,输入:wq保存并退出
在相同路径下使用vim新建后台启动脚本

vim startRsync.sh

在vim编辑页面按i键进入编辑模式,将以下内容粘贴到文件中

nohup bash rsync_realTime.sh > /dev/null 2>&1 & # 后台运行rsync_realTime.sh脚本,并不保存输出内容
                                                # 如果需要保存输出内容可将/dev/null改为自定义的存储位置

可根据自己的需求设定startRsync.sh是否开机自启动

三、其他

如果需要停止后台运行的同步脚本,可以输入以下指令

ps -def | grep -i "rsync_realTIme" | grep -v grep | awk '{print $2}' | xargs kill -9
posted @ 2025-11-05 16:47  ninanico  阅读(5)  评论(0)    收藏  举报