開工了好忙。。。我好方,我好園,我好懷念我顛倒黑白的日志。。。
今天來講解lsyncd中的自定義配置。
lsyncd提供了三種配置:default.rsync, default.rsyncssh和default.direct。當(dāng)然lsyncd
是很強大靈活的我們也可以根據(jù)自己的需求編寫自己的配置。lsyncd提供了六個接口或者鉤子來讓我們實
現(xiàn)自己的配置。
onAttrib
僅當(dāng)屬性更改時調(diào)用,每產(chǎn)生一次屬性修改事件就調(diào)用一次。
onCreate
創(chuàng)建文件時調(diào)用。每產(chǎn)生一次創(chuàng)建事件就調(diào)用一次。
onModify
文件更改時調(diào)用。每產(chǎn)生一次修改事件就調(diào)用一次
onDelete
刪除文件時調(diào)用。每產(chǎn)生一次刪除事件就調(diào)用一次
onMove
文件移動時調(diào)用。每產(chǎn)生一次移動事件就調(diào)用一次
onStartup
初始化該配置時調(diào)用,一般配置初始化都在啟動lsyncd時候進(jìn)行,每個配置的onStartup僅在
初始化時候調(diào)用一次,后續(xù)不會在調(diào)用,除非再次重啟。
下面寫給例子來試一下

image.png
^sourcePathname ^targetPathname是用來引用lsyncd中的變量,表示源路徑,目標(biāo)目錄,具體
變量有哪些后面具體介紹。
echo 和 /bin/echo 指的是同一個命令,但是 lsyncd中處理方式是不一樣的哦。
啟動lsyncd, 還是以前臺方式啟動,并且輸出全部日志,這樣方便觀察。
lsyncd -log all -nodaemon /etc/lsyncd.conf

image.png
每個鉤子都被翻譯成了對應(yīng)的lua函數(shù)。其實我們也可以直接寫lua函數(shù),后面在講。
可以清楚的看到 echo 和/bin/echo雖然是同一個Linux命令但在lua中是兩種不一樣的處理方式。
以絕對路徑就是以 / 開頭操作都會指示Lsyncd在開始時直接調(diào)用二進(jìn)制文件,而不是生成其他
shell。spawn函數(shù)就是直接調(diào)用二進(jìn)制文件,相當(dāng)于在命令行中執(zhí)行:/bin/echo a b c
非絕對路徑開頭的操作,lsyncd 會生成一個shell去執(zhí)行,相當(dāng)于在命令行執(zhí)行:
/bin/sh -c “echo a b c”

image.png

image.png
1. onStartup在啟動時候,執(zhí)行了一次,后面不會在執(zhí)行
2. 在另一個命令行中在監(jiān)控目錄/var/www/html/中創(chuàng)建一個qyyt.txt文件,可以看到, onCreate和
onModify被調(diào)用。
3. 我們在配置中設(shè)置的延遲時間deley為5秒,可以看到delay秒后才執(zhí)行了同步操作。
lsyncd 內(nèi)置了一些變量:
^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
目標(biāo)文件的絕對路徑, 如果是目錄的話末尾帶斜杠 /,例如:
/tmp/htmlcopy/abc/qyyt.txt 或者/tmp/htmlcopy/abc/qyyt_dir/
注意了,htmlcopy 和 abc 之間是一個 /
^targetPathname
目標(biāo)文件的絕對路徑, 目錄末尾不帶斜杠 /,例如:
/tmp/htmlcopy/abc/qyyt.txt 或者/tmp/htmlcopy/abc/qyyt_dir
注意了,htmlcopy 和 abc 之間是一個 /
寫字符串真是一件不爽的事情, 現(xiàn)在把它改成lua函數(shù)的方式

image.png

image.png
還是lua方式寫著得勁啊,onCreate, onModify這些到底是在什么時候執(zhí)行呢?事件發(fā)生前,還是
事件觸發(fā)后,還是同步開始前?還是同步開始后呢?
我們來測試一下, delay設(shè)置為15表示事件觸發(fā)后15秒開始同步,sleep 10 表示休眠10秒后輸出
xxxx,模擬耗時操作,不然太快了不好觀察。

image.png

image.png

image.png
我們可以看到26秒的時候監(jiān)控到創(chuàng)建了目錄bbzzz, 15秒之后也就是41秒的時候,開始進(jìn)行同步操
作,sleep 10秒剛好是51秒時候輸出xxxxx。這樣證實了onCreate, onModify這些到底是同步開始前
執(zhí)行的。
但是,如果我想要知道什么時候同步完畢,或者同步完畢時候進(jìn)行日志記錄,那么怎么辦呢?請聽
下回分解哦
by 旗魚云梯
by 旗魚云梯