目标
/usr/local/src
目录在两台 CentOS 7 服务器之间双向实时同步- 任何一台机器目录变化,都会自动同步到另一台
- 开机自动运行,断网重连后继续同步
过程
- 自动安装
unison
+inotify-tools
- 自动配置免密 SSH
- 自动创建 unison 配置文件
- 自动创建实时监控脚本
- 自动注册 systemd 服务并启动
部署
deploy_sync.sh脚本,在两台服务器上分别运行(注意替换 REMOTE_IP
、REMOTE_SSH_PORT
、REMOTE_USER
)
#!/bin/bash # 一键部署双向实时同步(CentOS 7) # 目录: /usr/local/src# ========== 用户配置区 ========== REMOTE_IP="192.168.1.2" # 对方服务器IP REMOTE_SSH_PORT="22" # 对方服务器SSH端口 REMOTE_USER="root" # 对方服务器用户名 SYNC_DIR="/usr/local/src" # 要同步的目录 # ===============================# 安装依赖 echo "[1/6] 安装 unison 和 inotify-tools..." yum install -y epel-release >/dev/null 2>&1 yum install -y unison inotify-tools >/dev/null 2>&1# 生成SSH密钥 echo "[2/6] 生成SSH密钥..." ssh-keygen -t rsa -N "" -f ~/.ssh/id_rsa >/dev/null 2>&1# 免密登录对方服务器 echo "[3/6] 配置免密登录到 $REMOTE_USER@$REMOTE_IP..." ssh-keyscan -p $REMOTE_SSH_PORT -H $REMOTE_IP >> ~/.ssh/known_hosts 2>/dev/null sshpass -p "" ssh-copy-id -p $REMOTE_SSH_PORT $REMOTE_USER@$REMOTE_IP >/dev/null 2>&1# 创建unison配置文件 echo "[4/6] 创建unison配置文件..." mkdir -p ~/.unison cat > ~/.unison/default.prf <<EOF root = $SYNC_DIR root = ssh://$REMOTE_USER@$REMOTE_IP:$REMOTE_SSH_PORT/$SYNC_DIRignore = Name *.swp ignore = Name *.tmp ignore = Name *~recurse = true auto = true batch = true prefer = newer EOF# 创建实时同步脚本 echo "[5/6] 创建实时同步脚本..." cat > /usr/local/bin/unison-realtime.sh <<'EOF' #!/bin/bash while inotifywait -r -e modify,create,delete,move /usr/local/src >/dev/null 2>&1; dounison >/dev/null 2>&1 done EOF chmod +x /usr/local/bin/unison-realtime.sh# 创建systemd服务 echo "[6/6] 注册systemd服务并启动..." cat > /etc/systemd/system/unison-realtime.service <<'EOF' [Unit] Description=Unison Realtime Sync After=network.target[Service] ExecStart=/usr/local/bin/unison-realtime.sh Restart=always User=root[Install] WantedBy=multi-user.target EOFsystemctl daemon-reload systemctl enable unison-realtime >/dev/null 2>&1 systemctl restart unison-realtimeecho "部署完成!现在 /usr/local/src 目录将在两台服务器间双向实时同步。" echo "查看状态: systemctl status unison-realtime" echo "查看日志: journalctl -u unison-realtime -f"
脚本做了什么?
安装 unison 和 inotify-tools 生成 SSH 密钥并免密登录到对方服务器 创建 unison 双向同步配置 创建实时监控脚本(inotifywait 检测文件变化 → 调用 unison 同步) 注册 systemd 服务,开机自启并立即运行
注意事项
两台服务器都要运行这个脚本 第一次运行会全量同步 /usr/local/src 目录 unison 默认会以修改时间新的文件为准解决冲突 如果要同步大文件,建议在低峰期首次运行