文件实时同步神器lsyncd配置详解三

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

下面写给例子来试一下
image.png
    ^sourcePathname ^targetPathname是用来引用lsyncd中的变量,表示源路径,目标目录,具体
变量有哪些后面具体介绍。
    echo 和 /bin/echo 指的是同一个命令,但是 lsyncd中处理方式是不一样的哦。
    启动lsyncd, 还是以前台方式启动,并且输出全部日志,这样方便观察。
    lsyncd -log all -nodaemon /etc/lsyncd.conf
image.png
    每个钩子都被翻译成了对应的lua函数。其实我们也可以直接写lua函数,后面在讲。
    可以清楚的看到 echo 和/bin/echo虽然是同一个Linux命令但在lua中是两种不一样的处理方式。
    以绝对路径就是以 / 开头操作都会指示Lsyncd在开始时直接调用二进制文件,而不是生成其他
shell。spawn函数就是直接调用二进制文件,相当于在命令行中执行:/bin/echo a b c 
    非绝对路径开头的操作,lsyncd 会生成一个shell去执行,相当于在命令行执行:
        /bin/sh -c “echo a b c”
image.png
image.png
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函数的方式
image.png
image.png
    还是lua方式写着得劲啊,onCreate, onModify这些到底是在什么时候执行呢?事件发生前,还是
事件触发后,还是同步开始前?还是同步开始后呢?
    我们来测试一下, delay设置为15表示事件触发后15秒开始同步,sleep 10 表示休眠10秒后输出
xxxx,模拟耗时操作,不然太快了不好观察。
image.png
image.png
image.png
    我们可以看到26秒的时候监控到创建了目录bbzzz, 15秒之后也就是41秒的时候,开始进行同步操
作,sleep 10秒刚好是51秒时候输出xxxxx。这样证实了onCreate, onModify这些到底是同步开始前
执行的。
    但是,如果我想要知道什么时候同步完毕,或者同步完毕时候进行日志记录,那么怎么办呢?请听
下回分解哦
    by 旗鱼云梯

by 旗鱼云梯

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容