#主備機器都安裝rsync和inotify-tools
sudo apt-get -y install rsync inotify-tools
#使用nginx配置文件測試:
/tmp# cd /tmp && cp -rf /usr/local/nginx/conf/ nginx_conf
#初始同步
rsync -avz --delete /tmp/nginx_conf root@10.80.7.14:/tmp
#!/bin/bash
# 定義源目錄和目標目錄的映射關系
declare -A paths=(
["/usr/local/nginx/conf"]="root@10.80.7.14:/usr/local/nginx/conf"
["/data/wwwroot"]="root@10.80.7.14:/data/wwwroot"
["/data/service"]="root@10.80.7.14:/data/service"
)
log_file="/data/logs/rsync/sync.log" # 日志文件路徑
# 同步函數,將指定的源目錄同步到目標目錄
sync_files() {
local source_dir="$1"
local destination_dir="$2"
echo "$(date '+%Y-%m-%d %H:%M:%S') - Syncing files in $source_dir..." >> "$log_file"
rsync -avz --delete "$source_dir/" "$destination_dir" >> "$log_file" 2>&1
echo "$(date '+%Y-%m-%d %H:%M:%S') - Sync complete for $source_dir." >> "$log_file"
}
# 并發處理函數,用于監控和同步指定的目錄
process_dir() {
local source_dir="$1"
# 用于獲取關聯數組 paths 中指定鍵 $source_dir 對應的值(value)
local destination_dir="${paths[$source_dir]}"
# 監控并同步指定的目錄
while inotifywait -r -e modify,create,delete,move "$source_dir"; do
sync_files "$source_dir" "$destination_dir"
done
}
# 同時監控和同步多個目錄
for source_dir in "${!paths[@]}"; do
process_dir "$source_dir" & # 在后臺運行處理函數
done
wait # 等待所有后臺進程完成
[Unit]
Description=File monitoring and synchronization service
[Service]
ExecStart=/opt/script/monitor.sh
[Install]
WantedBy=multi-user.target
#啟用和啟動服務
sudo systemctl enable monitor
sudo systemctl start monitor
#檢查服務的狀態
sudo systemctl status monitor
#停止服務
sudo systemctl stop monitor