OCC服务器和BCC服务器中文件同步
为了设置两台服务器间的免密登录并同步特定目录,我们需要完成几个步骤。首先,我们需要在两台服务器上配置SSH免密登录。接着,我们可以编写一个shell脚本,使用rsync命令来同步目录。
第一步:配置SSH免密登录
-  生成SSH密钥(如果尚未生成): 
 在192.168.1.88上执行:ssh-keygen -t rsa按提示操作,不要输入密码,这样就会在 ~/.ssh/id_rsa.pub生成公钥。
-  复制公钥到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。
-  反向操作: 
 同样的步骤也需要在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
第三步:设置定时任务
-  保存脚本:将上述脚本保存为 sync_dirs.sh,并赋予执行权限:chmod +x sync_dirs.sh
-  编辑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
设置定时任务
-  保存脚本:将上述脚本保存为 sync_dirs.sh,并赋予执行权限:chmod +x sync_dirs.sh
-  编辑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脚本以添加日志记录
-  修改脚本以添加日志记录: 
 在脚本中添加日志记录的命令,将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会将标准输出和错误输出都重定向到日志文件。
-  确保日志文件可写: 
 确保运行脚本的用户对日志文件有写权限。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!