inotifywait+rsync实现远程文件实时同步

10/14/2022 Linuxinotifyrsync

inotify是文件监控工具,可以监控到文件的变更,如创建、删除、移动、属性修改、访问等等,可以结合文件远程同步工具rsync实现文件变更实时同步。

# 概述

inotify是文件监控工具,可以监控到文件的变更,如创建、删除、移动、属性修改、访问等等,可以结合文件远程同步工具rsync实现文件变更实时同步。

提示:需要内核2.6.13以后内核版本才能支持inotify 可以使用如下命名查看内核版本

uname -r

# 安装

yum install -y inotify-tools

# inotifywait的使用

参数说明:

  • --exclude pattern 排除文件
  • --excludei pattern 排除文件,不区分大小写
  • -r --recursive 递归目录
  • -m --monitor 保持一直监听,而不是监听到有变动的文件就退出了
  • -e --event 要监听的事件,多个用(,)号隔开,默认全部
    • create
    • delete
    • modify
    • attrib
    • open
    • close
    • access
    • unmount
  • -q --quiet 结果精简
  • --format fmt 结果格式化
    • %w 表示发生事件的目录
    • %f 表示发生事件的文件
    • %e 表示发生的事件
    • %Xe 事件以“X”分隔
    • %T 使用由–timefmt定义的时间格式
  • --timefmt fmt 时间格式化

实时监控文件变化

inotifywait -rmq -e "create,modify,delete,move,attrib" --exclude="\.(swp|swx)$" --format="%w%f" /var/www/xxx

# 结合rsync实时远程同步脚本

注意:远程同步需要生成rsa公钥和私钥进行认证,避免输入密码。

vim /usr/local/scripts/file-sync.sh

#!/bin/bash

PATH_SRC=/data/xxx/
PATH_DEST=root@192.168.1.217:/data/backups/xxx/

/usr/bin/inotifywait -mrq -e "create,modify,attrib,move,delete" --format="%f" --exclude="\.(swp|swx)$" $PATH_SRC | while read line
do
    #echo $line
    if [ -f $line ];then
        rsync -az $PATH_SRC$line $PATH_DEST$line
    else
        rsync -az --delete $PATH_SRC $PATH_DEST
    fi
done

设置脚本自动在后台运行,并设置开机启动

cat > /usr/lib/systemd/system/file-sync.service << EOF
[Unit]
Description=file-sync
After=network.target

[Service]
User=root
Group=root
ExecStart=/bin/bash /usr/local/scripts/file-sync.sh
ExecStop=
Restart=on-failure

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start file-sync
systemctl enable file-sync

🕑 最后更新时间: 2022-10-14 08:32