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

发布时间:2023年12月26日

为了设置两台服务器间的免密登录并同步特定目录,我们需要完成几个步骤。首先,我们需要在两台服务器上配置SSH免密登录。接着,我们可以编写一个shell脚本,使用rsync命令来同步目录。

第一步:配置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 mml3@192.168.1.188
    

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

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

第二步:编写Shell脚本

这个脚本将使用rsync命令同步指定的目录。请确保两台服务器上都安装了rsync

#!/bin/bash

# 定义源服务器和目标服务器的地址
SOURCE_SERVER="mml3@192.168.1.188"
DEST_SERVER="mml3@192.168.1.88"

# 定义需要同步的目录
DIRS=(
    "/home/mml3/app/data/mml3/back"
    "/home/mml3/app/data/mml3/error"
    "/home/mml3/app/data/ftpserver/soft_scu"
    "/home/mml3/app/data/ftpserver/soft_sle"
    "/home/mml3/app/data/ftpserver/parameter"
)
# 日志文件路径
LOG_FILE="/var/log/sync_dirs.log"

# 循环同步每个目录,并将输出记录到日志文件
for dir in "${DIRS[@]}"; do
    echo "Starting sync for $dir at $(date)" >> $LOG_FILE
    rsync -avz --delete $SOURCE_SERVER:"$dir" "$dir" >> $LOG_FILE 2>&1
    echo "Finished sync for $dir at $(date)" >> $LOG_FILE
done

第三步:设置定时任务

  1. 保存脚本:将上述脚本保存为sync_dirs.sh,并赋予执行权限:

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

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

    这会将脚本执行的所有输出(包括错误)重定向到指定的cron日志文件中。

通过这些修改,您将能够在/var/log/sync_dirs.log/path/to/cron.log中查看同步操作和定时任务的详细日志。这将有助于您监控同步过程,并在出现问题时进行故障排除。

这样配置后,192.168.1.88将每5分钟同步一次指定目录到192.168.1.188,保持两者的数据一致。注意,这个脚本是单向的,文件只从188的目录同步到88。
如果188出问题了,那么我们就需要把88上面的文件同步到188上面
以下是执行的步骤:
当192.168.1.188需要从192.168.1.88同步数据时,您可以进行一些调整来反转同步的方向。这意味着您需要修改脚本,使其从192.168.1.88同步数据到192.168.1.188。这可以通过调换rsync命令中的源服务器和目标服务器来实现。

修改脚本以反转同步方向

在您的现有脚本中,只需将rsync命令的源和目标地址调换即可。以下是修改后的脚本示例:

#!/bin/bash

# 定义源服务器和目标服务器的地址
SOURCE_SERVER="mml3@192.168.1.88"  # 源服务器地址改为192.168.1.88
DEST_SERVER="mml3@192.168.1.188"   # 目标服务器地址改为192.168.1.188

# 定义需要同步的目录
DIRS=(
    "/home/mml3/app/data/mml3/back"
    "/home/mml3/app/data/mml3/error"
    "/home/mml3/app/data/ftpserver/soft_scu"
    "/home/mml3/app/data/ftpserver/soft_sle"
    "/home/mml3/app/data/ftpserver/parameter"
)

# 日志文件路径
LOG_FILE="/var/log/sync_dirs.log"

# 循环同步每个目录,并将输出记录到日志文件
for dir in "${DIRS[@]}"; do
    echo "Starting sync for $dir from $SOURCE_SERVER to $DEST_SERVER at $(date)" >> $LOG_FILE
    rsync -avz --delete "$SOURCE_SERVER:$dir" "$DEST_SERVER:$dir" >> $LOG_FILE 2>&1
    echo "Finished sync for $dir at $(date)" >> $LOG_FILE
done

设置定时任务

  1. 保存脚本:将上述脚本保存为sync_dirs.sh,并赋予执行权限:

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

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

注意事项

  • 在执行同步之前,请确保192.168.1.188上的rsync有足够的权限来写入目标目录。
  • 确保定时任务(crontab)是在正确的服务器上设置的。如果您希望从192.168.1.88同步到192.168.1.188,那么定时任务应该在192.168.1.88上设置。

为了监控同步操作的状态并了解是否同步成功或失败,您可以在脚本中添加日志记录功能。这可以通过将rsync命令的输出重定向到日志文件来实现。同样地,您可以修改crontab定时任务,以便它也记录执行的输出。

下面是如何修改您的脚本和crontab以添加日志功能的步骤:

修改Shell脚本以添加日志记录

  1. 修改脚本以添加日志记录
    在脚本中添加日志记录的命令,将rsync操作的输出重定向到一个日志文件中。例如:

    #!/bin/bash
    
    # 日志文件路径
    LOG_FILE="/var/log/sync_dirs.log"
    
    # 其他变量定义...
    
    # 循环同步每个目录,并将输出记录到日志文件
    for dir in "${DIRS[@]}"; do
        echo "Starting sync for $dir at $(date)" >> $LOG_FILE
        rsync -avz --delete $SOURCE_SERVER:"$dir" "$dir" >> $LOG_FILE 2>&1
        echo "Finished sync for $dir at $(date)" >> $LOG_FILE
    done
    

    这里,>> $LOG_FILE 2>&1 会将标准输出和错误输出都重定向到日志文件。

  2. 确保日志文件可写
    确保运行脚本的用户对日志文件有写权限。

文章来源:https://blog.csdn.net/u011197085/article/details/135229925
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。