inotifywait监控文件夹内容变化,实时异地同步
1. 服务器规划
主机名 | IP | 描述 |
---|---|---|
main | 172.16.32.3 | 主服务器 |
backup | 172.16.32.4 | 数据备份服务器 |
2. 实现效果演示
功能说明:
监视172.16.32.3服务器的/root/目录变化,将该目录下除“.”开头(隐藏文件)的文件同步到172.16.32.4服务器的/root/目录下,并将操作信息记录到172.16.32.3服务器的inotifywait.log文件中
inotifywait监控文件夹内容变化
3. 服务器初始化
3.1 主机名修改
hostnamectl set-hostname main && bash -- 172.16.32.3执行
hostnamectl set-hostname backup && bash -- 172.16.32.4执行
3.2 hosts配置
# 两个服务器都执行
echo '172.16.32.3 main
172.16.32.4 backup' >> /etc/hosts
3.3 免密认证配置
# 两个服务器都执行
# 证书生成
ssh-keygen
# 一直回车
# 证书拷贝到其他服务器
ssh-copy-id main
ssh-copy-id backup
3.4 inotify、rsync安装
yum install -y rsync inotify-tools
3.5 验证是否安装完成
inotifywait --help
rsync -h
4. 脚本
在172.16.32.3服务器的/home/目录下,创建脚本inotifywait.sh
vim /home/inotifywait.sh
chmod +x /home/inotifywait.sh
inotifywait.sh文件全内容
#!/bin/bash
# 监控目录
WATCH_DIR=/root
# 目录变化日志记录
LOG_FILE="/home/inotifywait.log"
# 同步到的服务器信息
REMOTE_SSH_PORT=22
REMOTE_IP=backup
REMOTE_USER=root
REMOTE_PATH=/root/
# 记录脚本开始执行时间
echo "[$(date +"%Y-%m-%d %H:%M:%S")] Script start." >> $LOG_FILE
# 使用 trap 命令在脚本退出时执行清理操作
trap "echo '[$(date +"%Y-%m-%d %H:%M:%S")] Script end.' >> $LOG_FILE" EXIT
# 监视目录下新建、修改、删除、移动状态
inotifywait -mrq -e modify,create,delete,move "$WATCH_DIR" | while read DIR EVENT FILE
do
# 获取当前时间
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
# 输出变更信息到日志文件
echo "[$timestamp] $EVENT: $DIR$FILE" >> "$LOG_FILE"
case $EVENT in
"CREATE"|"CREATE,ISDIR"|"MODIFY"|"MOVED_TO" )
rsync -az -e "ssh -p $REMOTE_SSH_PORT" --exclude '.*' -r "$WATCH_DIR"/* "$REMOTE_USER@$REMOTE_IP:$REMOTE_PATH"
;;
"DELETE"|"DELETE,ISDIR"|"MOVED_FROM" )
rsync -az --delete -e "ssh -p $REMOTE_SSH_PORT" --exclude '.*' "$WATCH_DIR"/ "$REMOTE_USER@$REMOTE_IP:$REMOTE_PATH"
;;
esac
done