文件實時同步神器lsyncd配置詳解三

    開工了好忙。。。我好方,我好園,我好懷念我顛倒黑白的日志。。。
    今天來講解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 旗魚云梯

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容