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