两个Ubuntu机器,设置共享目录实时同步

发布于:2025-05-30 ⋅ 阅读:(25) ⋅ 点赞:(0)

业务背景:两个Linux机器需要实时更新同步一个指定目录下内容,具体内容如下:

机器A:192.168.1.10

机器B:192.168.1.20

前提两个内网机器可以免密登录

🉑👀参考:两个Ubuntu机器(内网)免密登录设置-CSDN博客

1、安装工具

sudo apt-get update

安装rsync和inotify-tools

rsync:一个快速且灵活的文件复制工具,它可以同步两个目录之间的文件差异,只复制变化的文件部分。
inotify-tools:一个文件系统事件监控机制,允许你监视文件系统的变化,如创建、删除、修改等。

安装命令: 

sudo apt-get install rsync inotify-tools

机器A、B需要都安装这个两个工具 

2、编写脚本sync.sh

#!/usr/bin/env bash

# 定义源和目标目录
SOURCE_DIR="/home/software/app/temp"
DEST_HOST="root@192.168.1.20"
DEST_DIR="/home/software/app/temp"
LOG_FILE="/home/software/app/fsync/log/rsync.log"

# 首次全量同步
echo "Initial full sync..."
rsync -az --delete --log-file="$LOG_FILE" "$SOURCE_DIR/" "$DEST_HOST:$DEST_DIR"

# 监听并同步变更
echo "Watching for changes in $SOURCE_DIR..."

inotifywait -mrq \
  -e create,delete,modify,move \
  --format '%w%f' \
  "$SOURCE_DIR" | while read CHANGED_FILE; do
    echo "Detected change: $CHANGED_FILE"
    rsync -az --delete --log-file="$LOG_FILE" "$SOURCE_DIR/" "$DEST_HOST:$DEST_DIR"
done

3、运行脚本

可以直接运行

./sync.sh

或者是守护进程运行

nohup ./script.sh > /log/fsync.log 2>&1 &

nohup ./sync.sh > fsync.log 2>&1 &
等同于
nohup ./sync.sh > fsync.log 2>fsync.log &

">"符号用于将命令的`标准输出`重定向到指定的文件中
> fsync.log 表示将终端输出保存到 fsync.log文件中
"2>"表示将命令的`标准错误`输出重定向到指定的文件中
2>&1 表示将命令的标准错误输出重定向到标准输出1中一起输出
& 后台挂起

✅查看进程

ps -ef | grep sync.sh

 或者是

ps -aux | grep "sync.sh"

a: 显示所有程序
u: 以用户为主的格式来显示
x: 显示所有程序,不区分终端机 

若是脚本有格式问题,则安装dos2unix 将脚本转换为 Unix 格式

sudo apt install dos2unix
dos2unix sync.sh

这样再执行脚本就不会报错了!也就可以正常同步目录下的内容了。


网站公告

今日签到

点亮在社区的每一天
去签到