rsync 结合 inotify 实现文件实时同步(二)

目录

一、编译安装inotify

二、测试

三、inotifywait 参数详解

四、手动方式监控目录

五、编写 rsync 结合 inotify 实现文件实时同步脚本

角色系统ip主机名
服务端Ubuntu 20.4192.19.0.171

bus

客户端Ubuntu 20.4172.19.0.170web

一、编译安装inotify

在客户端安装inotify,即被监控端安装:

root@jt-test-web:~# apt install -y make gcc build-essential
root@jt-test-web:~# wget js.funet8.com/centos_software/inotify-tools-3.14.tar.gz
root@jt-test-web:~# tar -zxvf inotify-tools-3.14.tar.gz
root@jt-test-web:~# cd inotify-tools-3.14/
root@jt-test-web:~/inotify-tools-3.14# ./configure
root@jt-test-web:~/inotify-tools-3.14# make && make install

二、测试

        安装inotify-tools后,当我们使用 inotifywait -rm /root/来监控文件夹时报错:inotifywait: error while loading shared libraries【inotifywait:加载共享库时出错】

解决办法:

1.首先进入/usr/local/lib/ 目录查看是否有这个文件libinotifytools.so.0: 

2.将目标文件链接(link)到核心库lib 和lib64中: 

root@jt-test-web:/usr/local/lib# ln -sv /usr/local/lib/libinotify* /usr/lib/
root@jt-test-web:/usr/local/lib# ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0

3.输入inotifywait -rm /root/,另开一个相同终端在root目录下新建一个文件,即可看到监控效果。

三、inotifywait 参数详解

inotifywait 选项:

-r:递归,对目录中的子目录中的文件做监控

-q:仅仅打印少量信息(仅仅打印监控的事件)

-m:一直处于监控状态(默认在前台进行监控)

-d:以守护进程的方式来运行(运行在后台)

-o file:将监控到的时间输出到一个文件中(默认是输出到标准输出)

-s:将错误信息输出到系统日志中(默认是将错误信息输出到标准输出)

--excludei:忽略文件的大小写

-e <event>:指定要监控的事件

        access:访问事件

        modify:编辑事件

        attrib:修改文件属性事件(修改文件的元数据)

        close_write:当文件从写模式关闭的时候,会触发该事件

        close_nowrite:当文件从只读模式下关闭的时候,会触发该事件

        close:无论以什么方式打开文件,在关闭文件的时候,都会触发该事件

        open:当文件被打开的是,就会触发该事件

        moved_to:当一个文件被移动到监控目录下,就会触发该事件

        moved_from:当一个文件从监控目录下移走的时候,就会触发该事件

        moved_self:在监控目录下执行移动操作,就会触发该事件

        move:主要发生了文件的移动,就会触发该事件

        create:创建文件的事件

        delete:删除文件的事件

--timefmt <fmt>:指定输出发生这个事件的时间点的显示格式

--format <fmt>:指定的当发生事件以后所输出的信息,以及输出的个数

        %f:输出发生事件的文件名

        %w:输出发生事件的文件所在的目录的绝对路径

        %e:输出发生事件的名称(如果有多个事件,多个事件用空格分隔)

        %Xe:输出发生事件的名称(如果有多个事件,多个事件用x分隔)

        %T:输出发生事件的时间(时间的格式由 --timefmt <fmt>)

四、手动方式监控目录

在root目录下面创建一个text目录,监控text目录:

root@jt-test-web:~# inotifywait -mrq --timefmt "%F %T" --format '%T %w%f %e' -e create,delete,modify /root/text/

在text目录下创建文件,效果如下:

五、编写 rsync 结合 inotify 实现文件实时同步脚本

1.编写脚本

root@jt-test-web:~# vim /etc/inotify.sh
#!/bin/bash

# inotify
iorder="inotifywait"
events="create,delete,modify,attrib,move"
ioptions="-mrq"
ipath="/root/text/"

# rsync
rhost="172.19.0.171"
vuser="keymantech"
secfile="/etc/rsync-client.passwd"
roptions="-az"
modName="fbi_back"
$iorder $ioptions --timefmt "%F %T" --format '%T %w%f %e' -e $events $ipath | while read files
do
    rsync $roptions --delete $ipath $vuser@$rhost::$modName --password-file=$secfile
    echo "${files} was rsynced" >> /tmp/rsync.log 2>&1
done

2.检查脚本

root@jt-test-web:~# sh +x /etc/inotify.sh

切记等号两边不能有空格,不然会报错:

 3.运行脚本

1.# 设置脚本后台运行:
nohup bash /etc/inotify.sh > /dev/null 2>&1  &
ps -ef | grep inotify

2.# 在text目录下进行创建、删除文件等操作

3.# 查看inotify生成的日志
tail /tmp/rsync.log 

4.# 到服务端模块目录下查看文件是否同步

 nohup命令:该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)

  • /dev/null 表示空设备文件
  • 0 表示stdin标准(键盘)输入
  • 1 表示stdout标准(屏幕)输出
  • 2 表示stderr标准错误(输出)

把标准出错重(2)定向到标准输出(1),然后扔到/DEV/NULL下面去。通俗的说,就是把所有标准输出和标准出错都扔到垃圾桶里面。

最后一个& : 是让该命令在后台执行

4.设置开机自启

(1).打开 rc-local.service脚本内容,内容如下:

root@jt-test-web:~/text# vim /lib/systemd/system/rc-local.service

 一般正常的启动文件主要分成三部分:

[Unit] 段: 启动顺序与依赖关系
[Service] 段: 启动行为,如何启动,启动类型
[Install] 段: 定义如何安装这个配置文件,即怎样做到开机启动

可以看出,/etc/rc.local 的启动顺序是在网络后面,但是显然它少了 Install 段,也就没有定义如何做到开机启动,所以显然这样配置是无效的。 因此我们就需要在后面帮他加上 [Install] 段: 

[Install]
WantedBy=multi-user.target  
Alias=rc-local.service

root@jt-test-web:~/text# chmod 777 /lib/systemd/system/rc-local.service

(2).查看系统中有无 /etc/rc.local 这个文件,没有则自己创建一个。

root@jt-test-web:~/text# vim /etc/rc.local
# 添加下面信息:
#!/bin/sh
sh /etc/inotify.sh&

root@jt-test-web:~/text# chmod +x /etc/rc.local

如果在 /etc/rc.local 中添加的是 ./test.sh 这种类型的,要在末尾加上&, 不然重启ubuntu的时候会卡在启动界面进不去系统。 

(3).创建软连接

systemd 默认读取 /etc/systemd/system 下的配置文件, 所以还需要在 /etc/systemd/system 目录下创建软链接:

root@jt-test-web:~/text# ln -s /lib/systemd/system/rc.local.service /etc/systemd/system/

大功告成!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stars.Sky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值