============================================
转载自
作者:苏南大叔 【京城,非著名互联网从业人员】
来源:https://newsn.net/say/inotifywait-rsync.html
============================================
欢迎转发/打赏/点赞/留言,感谢您的支持!
inotify实际上是两个命令,一个是:inotifywatch,另外一个是inotifywait。在本文中,苏南大叔将要讲述的是:inotifywait。这个命令可以监控系统内,文件的变化情况。使用它,结合rsync命令。就可以做到精准同步文件了。事实上,inotify+rsync的命令组合,是大多数运维人员的压箱底组合。

如何利用 inotifywait 命令监控文件变化?(图1-1)
引入inotify的原因,就是它可以更精准的控制要同步的文件。本文的测试环境为:centos7.5,测试机就是rsync文章中的master测试机。
安装inotify
inotify并不是系统自带的命令。所以,还是需要安装一下inotify。对于centos7.5系统来说,最简单的安装方法,莫过于yum了。下面是在系统中,利用yum安装inotify-tools的命令。
Bash
yum install inotify-tools -y
可能是有些认知上的混乱啊,inotify的包名叫做:inotify-tools。功能命令是两个:inotifywatch和inotifywait。一般来说,大家说的inotify都指的是inotifywait。那么,本文中,也指的是inotifywait,它是用于master源服务器的文件监控的。
下面是段结合rsync功能的代码,基本上来说,就是:当监控到有文件变化的时候,就同步这个文件到slave服务器。这段代码是放置在一个sh文件中的,文件名及路径是:
Bash
/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文件。在文档的最后,添加下面的字样:
Bash
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经验文章,请点击苏南大叔的博客:
1155

被折叠的 条评论
为什么被折叠?



