网站域名管理怎么登陆广告推广精准引流
OCC服务器到BCC服务器文件正向同步
需求:编写shell脚本,使用rsync
命令来同步目录,把全部需要同步的目录放在配置文件中,设置定时任务自动同步
服务器IP:
服务器类型 | IP地址 |
---|---|
OCC服务器 | 192.168.1.188 |
BCC服务器 | 192.168.1.88 |
第一步:配置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上。ssh-copy-id -i ~/.ssh/id_rsa.pub mml3@192.168.1.88
第二步:编写Shell脚本
在BCC服务器1.88上新建一个脚本sync_dirs.sh,将使用rsync
命令从1.188上同步指定的目录到1.88的本地目录。请确保两台服务器上都安装了rsync
。将需要同步的文件夹全部填写到配置文件/home/mml3/sync_dirs.conf
中。
#!/bin/bash# 定义源服务器的地址
SOURCE_SERVER="mml3@192.168.1.188"# 配置文件路径
CONF_FILE="/home/mml3/sync_dirs.conf"# 日志文件路径
LOG_FILE="/home/mml3/app/sync_dirs.log"# 检查配置文件是否存在
if [ ! -f "$CONF_FILE" ]; thenecho "配置文件不存在: $CONF_FILE" | tee -a "$LOG_FILE"exit 1
fi# 读取配置文件并同步每个目录
while IFS= read -r dir; do# 跳过空行if [ -z "$dir" ]; thencontinuefi# 如果目录不存在,则创建if [ ! -d "$dir" ]; thenecho "目录不存在,正在创建: $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>&1echo "完成同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
done < "$CONF_FILE"
第三步:设置定时任务
-
保存脚本:将上述脚本保存为
sync_dirs.sh
,并赋予执行权限:chmod +x sync_dirs.sh
-
首次需要手动执行,执行完以后配置定时任务
./sync_dirs.sh
-
编辑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="mml3@192.168.1.88"# 配置文件路径
CONF_FILE="/home/mml3/sync_dirs.conf"# 日志文件路径
LOG_FILE="/home/mml3/app/sync_dirs.log"# 检查配置文件是否存在
if [ ! -f "$CONF_FILE" ]; thenecho "配置文件不存在: $CONF_FILE" | tee -a "$LOG_FILE"exit 1
fi# 读取配置文件并同步每个目录
while IFS= read -r dir; do# 跳过空行if [ -z "$dir" ]; thencontinuefi# 如果目录不存在,则创建if [ ! -d "$dir" ]; thenecho "目录不存在,正在创建: $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>&1echo "完成同步目录: $dir - $(date)" | tee -a "$LOG_FILE"
done < "$CONF_FILE"
第二步:设置定时任务
-
保存脚本:将上述脚本保存为
sync_dirs.sh
,并赋予执行权限:chmod +x sync_dirs.sh
-
首次需要手动执行,执行完以后配置定时任务
./sync_dirs.sh
-
编辑Crontab:
使用crontab -e
命令编辑定时任务,使其同时记录标准输出和错误输出。*/5 * * * * /path/to/sync_dirs.sh >> /tmp/cron.log 2>&1