rsync+inotify實時同步

                                            rsync+inotify實時同步


rsync 遠程同步工具 

             工作機制爲:通過rsync算法對源文件和目標文件特徵碼做對比,若相同則不復制不同才複製,因此相比與傳統的【cp 和 scp---(直接覆蓋) 而言具有以下優點


1,執行效率高

2,本身傳輸數據是明文的但是可藉助ssh實現數據的安全傳輸

3,可以鏡像保存整個目錄樹或FS

4,支持匿名傳輸


工作模式:


1shell模式         實現本地文件傳輸也稱爲本地模式

2,遠程shell模式    利用ssh協議承載遠程數據傳輸過程

3,列表模式         顯示指定目標的列表,可以遞歸顯示

4,服務模式         可以工作爲守護進程接受客戶端的同步請求

 

常用的命令選項



-n               做測試傳輸 不真正執行同步動作

-v           顯示詳情         --progress    顯示進度  --stats          顯示狀態

-a                 -rlptgoD  歸檔

-q                 靜默模式      

-c                 開啓校驗功能

-r                 遞歸

-g                保持屬組

-o                保持屬主

-u                強制跳過目標文件中那些modifiy time 新於源文件的文件

-p                保留文件權限

-t                 保留文件的時間戳

-l                 保留符號連接 

-D               保留設備文件

-e                啓用ssh

-z                啓用壓縮

工作於守護進程的啓用方法:

rsync是一個瞬時守護進程依賴於xinetd

rsync服務模式的配置文件語法結構

 
################global段1個###########
uid  = “用戶名”                         
gid  =  “組名”
use chroot = “yes|no”
max connections = “number”
strict modes = “yes|no”
pid file = /path/rsyncd.pid
log file = /path/rsyncd.log
lock file = /path/rsyncd.lock
 
##########share段多個################
[share name]
path = /path/dir
ignore errs = “yes|no”
read only = “yes|no”
write only = “yes|no”
hosts allow = “networkaddr|host addr”
hosts deny = 同上或是*
list = “ture|false”
uid = ‘username’
gid =  ‘groupname’
auth users = username
secret file = 文件-------格式爲username:password 一行一個


進程模式命令

Access via rsync daemon:

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

    rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST




 

inotify 是一個應用程序編程接口 普通用戶想使用可以藉助inotify-tool這個應用程序

其有兩個命令行工具

inotifywait:通過調用inotify api等待文件事件的發生並顯示

inotifywatch:通過調用inotifyapi 實現對文件相關事件的收集

 



 

inotifywait的相應命令選項

         -m 持續監控 而默認是僅檢測一次

         -r  表示遞歸 可監控目錄及子目錄文件

         -e  指定要監控文件發生的事件,默認是監控所有的事件;access, modify, attrib,close_write, close_nowirte, close, open, moved_to, moved_from, move, create,delete, delete_selt等;

           --format :自定義inotifywait的輸出格式,如--format '%T %w %f';常用的格式符如下:

           %w:顯示被監控文件的文件名;

           %f:如果發生某事件的對象是目錄,則顯示被監控目錄的名字;默認顯示爲空串;

          %T:使用--timefmt選項中自定義的時間格式;

--timefmt :當在--format選項中使用%T時,使用此選項指定時間格式

          後常用的參數是'%d/%m/%y %H:%M'




下面將通過實驗說明inotify+rsync的應用

wKioL1P6Esvi-R1dAAEIvmBAdWc417.jpg

部署server2

httpd安裝在此不再贅述

vim /etc/xinet.d/rsync

wKiom1P6Eb6CpAOvAAEU4cfJsEc158.jpg



提供配置文件

vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict modes = yes

pid file = /var/run/rsyncd.pid

log file =/var/log/rsyncd.log

lock file =/var/lock/rsyncd.lock

 

[webpage]

path = /var/www/html

read only = no

write only =no

uid = root

gid = root

list = false

hosts allow = 172.16.0.1/16

hosts deny = *

auth users = server1

secrets file = /etc/rsyncd.passwd

 

提供密碼文件

vim /etc/rsync.passwd

server1:hzm132

 

service xinetd restart

 

server1編譯安裝inotify-tool

./configure 

make && make install

 

爲server1提供自動推送腳本
 
#!/bin/bash
#des : sync
#os ; linux
#date :2014-08-24
#######################VAR#################
DSTDIR="webpage"
SRCDIR="/var/www/html/"
RHOST="172.16.101.100"
USERNAME="server1"
USERPASSWD="/var/rsyncd.passwd"
LOGFILE="/var/log/rsyncd.log"
#####################SCRIPTS###############
export RSYNC_PASSWORD="hzm132"
inotifywait -m -r -q --format '%T %w%f   %e' --timefmt '%y-%m-%d    %H:%M:%S' -e create,modify,delete,attrib $SRCDIR| while read FILESTAT
do        
   rsync -a   $SRCDIR $USERNAME@$RHOST::$DSTDIR
   echo "$FILESTAT" >> $LOGFILE 2>&1
done


 

 

 



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章