rsync+inotify實時同步
rsync 遠程同步工具
工作機制爲:通過rsync算法對源文件和目標文件特徵碼做對比,若相同則不復制不同才複製,因此相比與傳統的【cp 和 scp】---(直接覆蓋) 而言具有以下優點
1,執行效率高
2,本身傳輸數據是明文的但是可藉助ssh實現數據的安全傳輸
3,可以鏡像保存整個目錄樹或FS
4,支持匿名傳輸
工作模式:
1,shell模式 實現本地文件傳輸也稱爲本地模式
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:通過調用inotify的api 實現對文件相關事件的收集
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的應用
部署server2
httpd安裝在此不再贅述
vim /etc/xinet.d/rsync
提供配置文件
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