使用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

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

浙公網安備 33010602011771號