旗鱼云梯吧 关注:19贴子:139
  • 0回复贴,共1

旗鱼云梯技术分享—文件实时同步神器lsyncd配置详解三

只看楼主收藏回复

今天来讲解lsyncd中的自定义配置
lsyncd提供了三种配置:default.rsync、default.rsyncssh、default.direct。当然lsyncd是很强大灵活的,我们也可以根据自己的需求编写自己的配置,lsyncd提供了六个接口或者钩子来让我们实现自己的配置
onAttrib:仅当属性更改时调用,每产生一次属性修改事件就调用一次
onCreate:创建文件时调用,每产生一次创建事件就调用一次
onModify:文件更改时调用,每产生一次修改事件就调用一次
onDelete:删除文件时调用,每产生一次删除事件就调用一次
onMove:文件移动时调用,每产生一次移动事件就调用一次
onStartup:初始化该配置时调用,一般配置初始化都在启动lsyncd时候进行,每个配置的onStartup仅在初始化时候调用一次,后续不会在调用,除非再次重启
下面写给例子来试一下

^sourcePathname ^targetPathname是用来引用lsyncd中的变量,表示源路径,目标目录,具体变量有哪些后面具体介绍
echo和 /bin/echo指的是同一个命令,但是lsyncd中处理方式是不一样的
启动lsyncd,还是以前的方式启动,并且输出全部日志,这样方便观察
lsyncd -log all -nodaemon /etc/lsyncd.conf

每个钩子都被翻译成了对应的lua函数。其实我们也可以直接写lua函数,后面在讲
可以清楚的看到echo和/bin/echo虽然是同一个Linux命令,但在lua中是两种不一样的处理方式
以绝对路径就是以 / 开头操作都会指示Lsyncd在开始时直接调用二进制文件,而不是生成其他shell。spawn函数就是直接调用二进制文件,相当于在命令行中执行:/bin/echo a b c
非绝对路径开头的操作,lsyncd会生成一个shell去执行,相当于在命令行执行:/bin/sh -c “echo a b c”



1.onStartup在启动时候,执行了一次,后面不会在执行
2.在另一个命令行中在监控目录/var/www/html/中创建一个qyyt.txt文件,可以看到onCreate和onModify被调用
3.我们在配置中设置的延迟时间deley为5秒,可以看到delay秒后才执行了同步操作。lsyncd内置了一些变量:
^source:sync中定义的source,也就是/var/www/html
^target:sync中定义的target,也就是 /tmp/htmlcopy
^path:文件相对路径,如果是目录的话末尾带斜杠 /,例如:abc/qyyt.txt或者abc/qyyt_dir/
^pathname:文件相对路径,目录末尾不带斜杠 /,例如:abc/qyyt.txt或者abc/qyyt_dir
^sourcePath:源文件的绝对路径,如果是目录的话末尾带斜杠 /,例如:/var/www/html//abc/qyyt.txt或者/var/www/html//abc/qyyt_dir/ 。注意:html和abc之间是两个//
^sourcePathname:源文件的绝对路径,目录末尾不带斜杠 / ,例如:/var/www/html//abc/qyyt.txt或者/var/www/html//abc/qyyt_dir。注意:html和abc之间是两个//
^targetPath:目标文件的绝对路径,如果是目录的话末尾带斜杠 /,例如:/tmp/htmlcopy/abc/qyyt.txt或者/tmp/htmlcopy/abc/qyyt_dir/。 注意:htmlcopy和abc之间是一个 /
^targetPathname:目标文件的绝对路径,目录末尾不带斜杠 /,例如:/tmp/htmlcopy/abc/qyyt.txt或者/tmp/htmlcopy/abc/qyyt_dir。注意:htmlcopy和abc之间是一个 /
现在把它改成lua函数的方式



onCreate、 onModify这些到底是在什么时候执行呢?事件发生前,还是事件触发后,还是同步开始前?还是同步开始后呢?
我们来测试一下,delay设置为15表示事件触发后15秒开始同步,sleep 10表示休眠10秒后输出xxxx,模拟耗时操作,不然太快了不好观察



我们可以看到26秒的时候监控到创建了目录bbzzz,15秒之后也就是41秒的时候,开始进行同步操作,sleep 10秒刚好是51秒时候输出xxxxx。这样证实了onCreate、onModify这些是同步开始前执行的


1楼2020-03-31 17:51回复