我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

inotify实际上是两个命令,一个是:inotifywatch,另外一个是inotifywait。在本文中,苏南大叔将要讲述的是:inotifywait。这个命令可以监控系统内,文件的变化情况。使用它,结合rsync命令。就可以做到精准同步文件了。事实上,inotify+rsync的命令组合,是大多数运维人员的压箱底组合。

苏南大叔:如何利用 inotifywait 命令监控文件变化? - inotify
如何利用 inotifywait 命令监控文件变化?(图1-1)

引入inotify的原因,就是它可以更精准的控制要同步的文件。本文的测试环境为:centos7.5,测试机就是rsync文章中的master测试机。

安装inotify

inotify并不是系统自带的命令。所以,还是需要安装一下inotify。对于centos7.5系统来说,最简单的安装方法,莫过于yum了。下面是在系统中,利用yum安装inotify-tools的命令。

yum install inotify-tools -y

可能是有些认知上的混乱啊,inotify的包名叫做:inotify-tools。功能命令是两个:inotifywatchinotifywait。一般来说,大家说的inotify都指的是inotifywait。那么,本文中,也指的是inotifywait,它是用于master源服务器的文件监控的。

下面是段结合rsync功能的代码,基本上来说,就是:当监控到有文件变化的时候,就同步这个文件到slave服务器。这段代码是放置在一个sh文件中的,文件名及路径是:

/home/system/rsync/inotify.sh

sh文件的主要逻辑是:

newsn.net:这里是【评论】可见内容

代码说明

这里的代码的基础部分,来源自网络,苏南大叔有自己修改功能。关于这段代码,苏南大叔做如下额外说明:

  • 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启动文件里面了。

相关文章

总结

上述这般操作后,inotifywait命令,就开始结合rsync命令。监控master服务器上的某个目录,然后发生变化后,就同步到slave服务器上面的对应目录了。

更多inotify经验文章,请点击苏南大叔的博客:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   centos    inotify