OCC服务器和BCC服务器中文件同步

OCC服务器到BCC服务器文件正向同步

需求:编写shell脚本,使用rsync命令来同步目录,把全部需要同步的目录放在配置文件中,设置定时任务自动同步

服务器IP:

服务器类型 IP地址
OCC服务器 192.168.1.188
BCC服务器 192.168.1.88
第一步:配置SSH免密登录
  1. 生成SSH密钥(如果尚未生成):
    在192.168.1.88上执行:

    ssh-keygen -t rsa
    

    按提示操作,不要输入密码,这样就会在~/.ssh/id_rsa.pub生成公钥。

  2. 复制公钥到192.168.1.188
    在192.168.1.88上执行:

    ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    

    输入密码XXXXXX,完成后应能免密码登录到192.168.1.188

  3. 反向操作
    同样的步骤也需要在192.168.1.188上执行,复制其公钥到192.168.1.88上。

    ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
    
第二步:编写Shell脚本

在BCC服务器1.88上新建一个脚本sync_dirs.sh,将使用rsync命令从1.188上同步指定的目录到1.88的本地目录。请确保两台服务器上都安装了rsync。将需要同步的文件夹全部填写到配置文件/home/mml3/sync_dirs.conf中。

#!/bin/bash

# 定义源服务器的地址
SOURCE_SERVER="[email protected]"

# 配置文件路径
CONF_FILE="/home/mml3/sync_dirs.conf"

# 日志文件路径
LOG_FILE="/home/mml3/app/sync_dirs.log"

# 检查配置文件是否存在
if [ ! -f "$CONF_FILE" ]; then
    echo "配置文件不存在: $CONF_FILE" | tee -a "$LOG_FILE"
    exit 1
fi

# 读取配置文件并同步每个目录
while IFS= read -r dir; do
    # 跳过空行
    if [ -z "$dir" ]; then
        continue
    fi

    # 如果目录不存在,则创建
    if [ ! -d "$dir" ]; then
        echo "目录不存在,正在创建: $dir" | tee -a "$LOG_FILE"
        mkdir -p "$dir"
    fi

    # 开始同步
    echo "开始同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
    rsync -avz --delete "$SOURCE_SERVER:$dir/" "$dir" >> "$LOG_FILE" 2>&1
    echo "完成同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
done < "$CONF_FILE"
第三步:设置定时任务
  1. 保存脚本:将上述脚本保存为sync_dirs.sh,并赋予执行权限:

    chmod +x sync_dirs.sh
    
  2. 首次需要手动执行,执行完以后配置定时任务

    ./sync_dirs.sh
    
  3. 编辑Crontab
    使用crontab -e命令编辑定时任务,使其同时记录标准输出和错误输出。

    */5 * * * * /home/mml3/sync_dirs.sh >> /tmp/cron.log 2>&1
    

    这会将脚本执行的所有输出(包括错误)重定向到指定的cron.log日志文件中。可以在/home/mml3/app/sync_dirs.log/tmp/cron.log中查看同步操作和定时任务的详细日志。目前上面这个脚本是单向的,文件只从188的目录同步到88。 如果188出问题了,那么我们就需要把88上面的文件同步到188上面 以下是执行的步骤:


OCC服务器到BCC服务器文件反向同步

第一步:修改脚本以反转同步方向

在上面现有脚本中,只需将rsync命令的源和目标地址调换即可:然后在1.188上新建脚本并执行。

并且需要把同步的文件夹全部填写到配置文件/home/mml3/sync_dirs.conf中。

#!/bin/bash

# 定义源服务器的地址
SOURCE_SERVER="[email protected]"

# 配置文件路径
CONF_FILE="/home/mml3/sync_dirs.conf"

# 日志文件路径
LOG_FILE="/home/mml3/app/sync_dirs.log"

# 检查配置文件是否存在
if [ ! -f "$CONF_FILE" ]; then
    echo "配置文件不存在: $CONF_FILE" | tee -a "$LOG_FILE"
    exit 1
fi

# 读取配置文件并同步每个目录
while IFS= read -r dir; do
    # 跳过空行
    if [ -z "$dir" ]; then
        continue
    fi

    # 如果目录不存在,则创建
    if [ ! -d "$dir" ]; then
        echo "目录不存在,正在创建: $dir" | tee -a "$LOG_FILE"
        mkdir -p "$dir"
    fi

    # 开始同步
    echo "开始同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
    rsync -avz --delete "$SOURCE_SERVER:$dir/" "$dir" >> "$LOG_FILE" 2>&1
    echo "完成同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
done < "$CONF_FILE"
第二步:设置定时任务
  1. 保存脚本:将上述脚本保存为sync_dirs.sh,并赋予执行权限:

    chmod +x sync_dirs.sh
    
  2. 首次需要手动执行,执行完以后配置定时任务

    ./sync_dirs.sh
    
  3. 编辑Crontab
    使用crontab -e命令编辑定时任务,使其同时记录标准输出和错误输出。

    */5 * * * * /path/to/sync_dirs.sh >> /tmp/cron.log 2>&1
    

你可能感兴趣的:(文件同步,服务器,github,chrome)