环境:centos7.9 inotify-tools-3.1
我们在上一篇《Linux远程传输命令scp、rsync(tar打包归档并在系统之间传输文件)》中详细介绍了rsync命令的使用方法,rsync命令主要是用来同步两个系统之间的文件,rsync命令是增量同步,但rsync命令无法做到实时同步,想要自动同步我们首先想到的是结合crontab定时任务来实现,但定时任务最小粒度级也是每分钟同步,这样我们有什么办法能做到实时同步呢,办法就是rsync结合inotify工具来实现实时同步传输文件。
安装 inotify-tools工具[root@iflytek ~]# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz [root@iflytek ~]# cd inotify-tools-3.13 [root@iflytek inotify-tools-3.13]#./configure && make && make install #安装inotify [root@iflytek /]# ll /usr/local/bin/inotify* #安装完成会产生两个命令 -rwxr-xr-x 1 root root 52552 Oct 16 01:29 /usr/local/bin/inotifywait #inotifywait等待 -rwxr-xr-x 1 root root 54640 Oct 16 01:29 /usr/local/bin/inotifywatch #inotifywatch看守 [root@iflytek /]#inotifywait命令的使用 编写脚本
inotifywait只是一个监控文件的命令,那么如何做到实时监控呢,我们需要编写while循环脚本,内容就写inotifywait结合rsync传输文件,这就不就能做到实时监控文件的变化并传输到远程服务器上了吗,脚本内容如下:
[root@iflytek ~]# vim inotifywait_rsync.sh #创建脚本文件并写入一下内容 [root@iflytek ~]# cat inotifywait_rsync.sh #脚本内容 #!/bin/bash /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /root/test1/ | while read events do /usr/bin/rsync -avz --delete /root/test1/ /root/test2/ echo "`date +%F %T`出现事件$events">>/root/inotifywait.log 2>&1 done [root@iflytek ~]# chmod u+x inotifywait_rsync.sh [root@iflytek ~]# nohup /bin/sh /root/inotifywait_rsync.sh & #nohup 与&符号结合使脚本在后台不被窗口关闭中断运行 [root@iflytek ~]# echo "tetstst" >>test1/file2 #在监控目录test1中创建一个file2文件 [root@iflytek ~]# ll test2/ #查看test2/ 目录里面已经同步过来了一个file2文件 total 12 -rw-r--r-- 1 root root 6 Oct 16 02:57 file2 [root@iflytek ~]# tail -22f inotifywait.log #查看日志 2021-10-16 02:57:49出现事件/root/test1/ CREATE file2 2021-10-16 02:57:49出现事件/root/test1/ MODIFY file2
因条件有限,所以以上inotifywait_rsync.sh脚本内容只是测试了本地系统/root/test1/和 /root/test2/目录下的文件同步,可根据实际使用在两个Linux系统执行远程同步文件。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)