一、概念
1. 环境
(1) Rocky Linux 9.1
(2) inotify-tools 3.22.1.0
2. 概念
inotify用于监控文件或目录的改变,当文件或目录发生改变时inotify将触发通知。
3. 承上启下
二、安装与命令
1. 安装
(1) 安装epel库
sudo dnf install -y epel-release
sudo dnf update -y
(2) 安装inotify
sudo dnf install inotify-tools -y
2. inotifywait
inotifywait使用inotify接口有效的等待文件的改变。
(1) 格式
inotifywait [-hcmrq] [-e <event> ] [-t <seconds> ] [--format <fmt> ] [--timefmt <fmt> ] <file>
-h: 输出帮助信息;
-c: 以CSV格式(逗号分割)的方式进行信息输出;
-m: 进行持续监控而不退出,默认情况下当inotifywait收到一个事件之后会退出;
-r: 递归的监控所有子目录。注意inotifywait会针对每一个子目录创建一个监视器,默认情况下它最大的限制是8192个监视器;
-q: 安静模式,如果该参数被指定一次,则输出信息会减少;如果该参数被指定两次,程序仅会输出严重错误信息;
-e: 指定需要监控的事件,inotifywait支持以下事件:
access: 被监视的文件或被监视的目录中的文件被读取;
modify: 被监视的文件或被监视的目录中的文件被修改;
attrib: 被监视的文件或被监视的目录中的文件的metadata被修改。包含:timestamp,file permission,扩展的属性等;
close_write: 被监视的文件或被监视的目录中的文件从打开写入模式变为关闭时的事件;
close_nowrite: 被监视的文件或被监视的目录中的文件从打开只读模式变为关闭的事件;
close: 被监视的文件或被监视的目录中的文件从打开模式(无论是可写入状态还是只读模式)变为关闭时的事件;
open: 被监视的文件或被监视的目录中的文件被打开时的事件;
moved_to: 把一个文件或者目录移动到被监视的目录中时的事件,当文件在被监视的目录中移动时也会触发该事件;
moved_from: 把一个存在于被监视的目录中的文件或者目录移动时的事件,当文件在被监视的目录中移动时也会触发该事件;
move: 该事件是moved_to和moved_from两个事件的上层调用;
move_self: 被监视的文件或被监视的目录中的文件被移动的事件,当该事件被触发后,该文件或目录将不会再被监视;
create: 在被监视的目录中有文件或目录被创建时触发的事件;
delete: 在被监视的目录中有文件或目录被删除时触发的事件;
delete_self: 在被监视的目录中有文件或目录被删除时触发的事件,当该事件被触发后,该文件或目录将不会再被监视;
unmount: 当被监视的文件或目录所在的文件系统被卸载时所触发的事件,当该事件被触发后,该文件或目录将不会再被监视。
(2) 应用
a. 监视目录/tmp
inotifywait -m /tmp
当/tmp有文件变动时:
touch /tmp/hello cp /etc/passwd /tmp rm /tmp/passwd touch /tmp/goodbye rm /tmp/hello /tmp/goodbye
inotifywait会打印提示:
b. 监视目录及其子目录的create, delete, modify事件:
inotifywait -r -e modify,create,delete /home/userDir/Documents
三、自动同步方案
利用上文讲到的SSH和rsync和inotify,我们可以实现当某一目录(如网站或数据备份目录)发生变化时,由inotify触发rsync将已经改变的文件同步至目标服务器。
1. 思路
(1) 我们需要解决什么问题?
a. 网站发布之后多个节点的文件同步;
b. 数据库备份文件发生变更后传递到备份服务器;
(2) 如何解决?
a. 首先需要搭建通过公钥验证的SSH登录方式,参考Rock Linux 系列4 --- SSH
b. 安装rsync和inotify;
d. 创建配置文件,内容为需要同步(监控)的目录或文件,当文件或目录变更后需要同步的目标服务器以及目标目录也需要考虑;
e. 编写脚本读取d中的配置文件并对其内容使用inotifywait进行监控,当有监控时间产生时调用rsync进行后续处理;
f. 创建Linux Service将脚本以守护进程的方式进行维护;
2. 格式
(1) 脚本伪代码
while <list of conditions> do <list of commands> done
a. "list of condifitions"将监控所有需要监控的目录或文件,我们将在这里调用inotifywait命令;
b. "list of commands"是当被监控的目录或文件有事件发生时所调用的命令,我们将在这里调用rsync命令;
(2) 代码示例
while inotifywait -r -e modify,create,delete origenFolder do rsync -avz origenFolder/ destinationFolder done
四、参考
1. 命令
https://linux.die.net/man/7/inotify
https://linux.die.net/man/1/inotifywait
2. 其他
https://linuxhint.com/inotofy-rsync-bash-live-backups/
https://bartsimons.me/sync-folders-and-files-on-linux-with-rsync-and-inotify/
https://www.linuxjournal.com/content/linux-filesystem-events-inotify
标签:文件,inotifywait,inotify,Linux,---,事件,监视,目录 From: https://www.cnblogs.com/eagle6688/p/17198332.html