开工了好忙。。。我好方,我好园,我好怀念我颠倒黑白的日志。。。
今天来讲解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 旗鱼云梯