通过inotify和incron实现事件驱动自动数据传输

Posted simmy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过inotify和incron实现事件驱动自动数据传输相关的知识,希望对你有一定的参考价值。

机器环境Ubuntu Server 20.04 LTS

inotify

安装
sudo apt-get install inotify-tools

脚本,保存为inosync-new.sh

#!/bin/sh
while inotifywait -mrq --format "%w%f" -e create,modify,delete /shareDoc/TestLog/test; do {rsync -avz /shareDoc/TestLog/test/* -e "ssh -i /home/user/Desktop/datasync" user@3.3.3.163:/testlog/abc/}; done

运行时显示如下,在test文件夹下创建文件666.txt,脚本检测到这个新文件,因此触发rsync同步

\'通过inotify和incron实现事件驱动自动数据传输_incron\'

但是发现inotify有个问题就是只能通过shell脚本方式运行,无法成为系统服务,搜索后发现incron可以实现。

incron

安装

sudo apt-get install incron
incrond start
service incron status

sudo vim /etc/incron.allow

添加root,运行root用户运行,不然会提示没有权限

编辑incron, 类似crontab,只是不跟cron那样要设置时间

incrontab -e

/shareDoc/TestLog/test/A IN_MODIFY,IN_CREATE /bin/bash /root/run.sh
/shareDoc/TestLog/test/B IN_MODIFY,IN_CREATE /bin/bash /root/run.sh
/shareDoc/TestLog/test/C IN_MODIFY,IN_CREATE /bin/bash /root/run.sh
/shareDoc/TestLog/test/D IN_MODIFY,IN_CREATE /bin/bash /root/run.sh

这里设定了好多个文件夹的原因是incron不支持子文件夹的检测,只支持监控当前文件夹路径

run.sh 的内容,这里设置同步完后删除源文件,除了csv格式,另外使用key验证自动登陆远程服务器

rsync -az --remove-source-files --exclude="*.csv" /shareDoc/TestLog/test/* -e "ssh -i /root/s3sync" user@3.3.3.163:/mount/abc/

rsync -az --include="*.csv" /shareDoc/TestLog/test/* -e "ssh -i /root/s3sync" user@3.3.3.163:/mount/abc/

这里第二条rsync使用include 将csv包括进来,是因为第一条为了实现同步并删除其它格式的文件,而需要保留csv文件在服务器上不删除

 

查看运行

incrontab -l
tail /var/log/syslog

在文件夹里创建一个777.txt的文件夹,系统自动发现,然后触发sh运行,这是Ubuntu Server 20.04,能看到具体是什么文件,例如这里是777.txt这个文件创建和修改,但是同样在Ubuntu Server 16.04下测试,却不会显示具体文件名的信息,只会提示检测有更改然后运行sh的log

\'通过inotify和incron实现事件驱动自动数据传输_incron_02\'

 

以上是关于通过inotify和incron实现事件驱动自动数据传输的主要内容,如果未能解决你的问题,请参考以下文章

数据的实时同步

rsync+inotify 实现自动同步

Inotify:目录创建的奇怪行为

通过inotify实现反调试

(转)Linux下通过rsync与inotify(异步文件系统事件监控机制)实现文件实时同步

使用 Incrond Inotify 但用户组/权限有问题