rsync雖然能夠實現觸發式的文件同步,可是經過crontab守護進程方式進行觸發,同步的數據和實際數據會有差別,而inotify能夠監控文件系統的各類變化,當文件有任何變更時,就觸發rsync同步,這樣恰好解決了個人需求,同步數據實時性的問題,下面便看我娓娓道來。git
一) listsgithub
Ipc# |
Statusbash |
Cp PATH服務器 |
Appapp |
192.168.1.1ide |
Serverui |
/dataspa |
Rsync-serverorm |
192.168.1.2 |
Client |
/OM/logs/data |
Rsync-client+inotify |
二)需求
server端服務器(192.168.1.1)像client端服務器(192.168.1.2)同步數據,並讓inotify監聽操做。
若是client端的/OM/logs/data下面有建立、刪除等文件操做,server端也會相應的實時同步數據文件。
三)實戰
Server:1.建立rsync主配置文件rsyncd.conf
root@192.168.1.1 :/etc# vi /etc/rsyncd.conf
log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock max connections = 100 use chroot = no uid = root gid = root ignore errors list = no [example] path = /OM/logs/data read only = no #no客戶端可上傳文件,yes只讀 write only = no #no客戶端可下載文件,yes不能下載 auth users = aaron # 認證的用戶名,若是沒有這行,則代表是匿名 secrets file = /etc/rsyncd.passwd # 指定認證口令文件位置 hosts allow = 192.168.1.2 hosts deny = *
2.建立密碼驗證文件,rsyncd.passwd
root@192.168.1.1:/etc# vi rsyncd.passwd aaron:bu/I*)NEj
3.修改密碼文件權限
chmod 600 rsync.passwd
4.啓動Rsync
/usr/bin/rsync --daemon
Client:1,建立密碼驗證文件rsyncd.passwd,這裏只須要輸入密碼就能夠了。
# vi rsyncd.passwd bu/I*)NEj
2.安裝inotify
[root@192.168.1.2 ]# cd /app [root@192.168.1.2 app]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz [root@192.168.1.2 app]# tar zxvf inotify-tools-3.14.tar.gz [root@192.168.1.2 app]# cd inotify-tools-3.14 [root@192.168.1.2 inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify [root@192.168.1.2 inotify-tools-3.14]# make [root@192.168.1.2 inotify-tools-3.14]# make install
3.建立同步腳本
#!/bin/bash host=192.168.1.1 src=/data des=example user=aaron /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files do /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.passwd $src $user@$host::$des echo "${files} was rsynced" >>/var/log/rsync.log 2>&1 done
4.修改腳本權限並運行
chmod 764 rsync.sh
nohup rsync.sh &
5.講腳本加入開機啓動項
echo "/usr/local/inotify/rsync.sh" >> /etc/rc.local