如何利用 inotifywait 命令监控文件变化?
发布于 作者:苏南大叔 来源:程序如此灵动~inotify
实际上是两个命令,一个是:inotifywatch
,另外一个是inotifywait
。在本文中,苏南大叔将要讲述的是:inotifywait
。这个命令可以监控系统内,文件的变化情况。使用它,结合rsync
命令。就可以做到精准同步文件了。事实上,inotify
+rsync
的命令组合,是大多数运维人员的压箱底组合。
引入inotify
的原因,就是它可以更精准的控制要同步的文件。本文的测试环境为:centos7.5
,测试机就是rsync
文章中的master
测试机。
安装inotify
inotify
并不是系统自带的命令。所以,还是需要安装一下inotify
。对于centos7.5
系统来说,最简单的安装方法,莫过于yum
了。下面是在系统中,利用yum
安装inotify-tools
的命令。
yum install inotify-tools -y
可能是有些认知上的混乱啊,inotify
的包名叫做:inotify-tools
。功能命令是两个:inotifywatch
和inotifywait
。一般来说,大家说的inotify
都指的是inotifywait
。那么,本文中,也指的是inotifywait
,它是用于master
源服务器的文件监控的。
下面是段结合rsync
功能的代码,基本上来说,就是:当监控到有文件变化的时候,就同步这个文件到slave
服务器。这段代码是放置在一个sh
文件中的,文件名及路径是:
/home/system/rsync/inotify.sh
sh
文件的主要逻辑是:
代码说明
这里的代码的基础部分,来源自网络,苏南大叔有自己修改功能。关于这段代码,苏南大叔做如下额外说明:
inotifywait
后面的--format '%e %w%f %T'
,决定了:while read
能取到什么值。也就是主程序体中,能用到什么变量。rsync
的目标地址模块名后,有路径信息/$(dirname ${INO_FILE})/
。这个是网络上其它教程所没有的,大家可以自行体会为什么这么写。inotifywait
的参数-mrq
,这个是苏南大叔试了好多次试验出来的,比较好的一个组合。和网络上其它教程也不一样。
其它的地方,基本上就没有啥太特别的了。大家可以看看苏南大叔提供的rsync
的基本使用教程,会对这段代码有更好的理解。
加入开机启动
对于上述自定义inotify
脚本,文件名及路径是:/home/system/rsync/inotify.sh
,需要开机的时候就启动监控。所以,这里进行了进一步的组装。
这里使用了nohup
这个命令,来保持inotify.sh
功能的持续稳定后台运行。这个时候,苏南大叔,需要编辑一下/etc/rc.d/rc.local
文件。在文档的最后,添加下面的字样:
nohup sh -x /home/system/rsync/inotify.sh > /home/system/rsync/nohup.log 2>&1 &
- 这里的
nohup xxxxxxxxxxxxx &
是固定套路了,后台运行的意思。 /home/system/rsync/inotify.sh
,就是上边说的inotify
语句。- 输出log的
2>&1
,这个有个错误日志输出转到正常日志上的做法。
在centos
下面,加入开机启动的方式,还有做成services
服务的方式。用systemctl
控制等方式。不过,在这里,苏南大叔,就简单明了直接了。直接定义在rc.local
启动文件里面了。
相关文章
- 《服务器间,如何利用rsync同步文件资料?》 https://newsn.net/say/rsync-between-servers.html
总结
上述这般操作后,inotifywait
命令,就开始结合rsync
命令。监控master
服务器上的某个目录,然后发生变化后,就同步到slave
服务器上面的对应目录了。
更多inotify
经验文章,请点击苏南大叔的博客:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
感谢分享,学习一下
看了很多做法,参考大神是怎么写的
感谢分享
1
测试
看看 正在了解这块
值得一学
感谢分享,学习一下
了解看看
不错,非常有用呢。
网站做的不错啊,请问用的什么框架?
typecho