centos7只rsync+inotify
環境:
操作系統:centos7.4
192.168.1.238 客戶端
192.168.1.238 服務端
環境準備:
1、安裝以下安裝包lrzsz是xshell上傳下載的安裝包,可以忽略。
yum install -y lrzsz gcc wget gcc-c++ vim
2、關閉firewall防火墻,開機禁止啟動。永久關閉selinux。如果有iptables防火墻可以允許873端口。
服務端
1、安裝rsync
yum install -y rsync
2、更改配置文件
vim /etc/rsyncd.conf
1 #工作中指定用戶(可以不指定為0) 2 uid = 03 gid = 0 4 #相當於黑洞.出錯定位 5 use chroot = no 6 ##有多少個客戶端同時傳文件 7 max connections =200 8 ##超時時間 9 timeout = 300 10 ##進程號文件 11 pid ifle = /var/run/rsyncd.pid 12 lock file = /var/run/rsync.lock 13 ##日誌文件 14 log file = /var/log/rsyncd.log 15 ##模塊開始(這個模塊就是待會兒對端寫腳本的裏面一個參數的名稱) 16 [msone] 17 ##需要同步的目錄(準確的說是同步過來後放到哪裏的目錄路徑)18 path = /data/www 19 ##表示出現錯誤忽略錯誤 20 ignore errors 21 ##表示網絡權限可寫(本地控制真正可寫)(親測這裏寫false報錯) 22 read only = no 23 ##這裏設置IP或讓不讓同步 24 list = false 25 #允許的ip或者ip段 26 hosts allow = 192.168.1.238 27 ##拒絕,以下表示都不拒絕 28 hosts deny = 0.0.0.0/32 29 ##認證用戶 30 auth users = rsynclsl 31 ##用戶名和密碼存放文件 32 secrets file = /etc/rsync.secrets
3、添加同步需要用的用戶名和密碼
#useradd rsynclsl
#passwd rsynclsl
4、創建認證文件
vim /etc/rsync.secrets 文件裏面添加如下內容(格式為用戶名:密碼): rsynclsl:123456
5、為了安全起見給這個文件設置600權限。
6、啟動服務
#rsync --daemon
7、創建需要過來存放的目錄
mkdir /data/www
需要www這個目錄其它用戶可以寫的權限
chmod 765 www
8、如果需要添加開機啟動請看另外一篇博客http://www.cnblogs.com/lei0213/p/8595030.html
客戶端
1、查看當前系統是否支持inotify,這三個文件具體做什麽的可以自行百度
2、安裝rsync和inotify(rsync只安裝不啟動不配置)
yum install -y rsync
3、inotify是一種強大的、細粒度的、異步的文件系統事件控制機制。linux內核從2.6.13起,加入了inotify支持,通過inotify可以監控文件系統中添加、刪除、修改、移動等各種事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而inotify-tools正是實施監控的軟件。
#wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz #tar zxf inotify-tools-3.14.tar.gz #cd inotify-tools-3.14 #./configure --prefix=/usr/local/include/ # make && make install
官網:https://sourceforge.net/projects/inotify-tools/
4、最最最最最最重要的是要寫這個腳本,讓它自動去檢測我們制定的目錄下文件發生的變化,然後再執行rsync的命令把它同步到我們的服務器端去。
#touch inotify.sh #chmod 755 inotify.sh #vim inotify.sh
1 #!/bin/bash 2 #chkconfig: 345 88 14 3 host=192.168.1.239 #server的ip(備份服務器) 4 src=/data/www #所要監控的備份目錄(此處可以自定義,但是要保證存在) 5 des=msone #自定義的模塊名,需要與client端定義的一致 6 password=/etc/rsync.password #密碼文件 7 user=rsynclsl #用戶名(一個實際存在的賬號) 8 inotify=/usr/local/include/ #inotify的安裝目錄 9 10 ${inotify}/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f%e‘ -e modify,delete,create,attrib $src 11 | while read files 12 do 13 rsync -avzP --delete --timeout=100 --password-file=${password} $src $user@$host::$des 14 echo "${files} was rsynced" >>/tmp/rsync.log 2>&1 15 doneinotify.sh
5、執行該腳本
#./inotify.sh
6、如果需要添加開機啟動請看另外一篇博客http://www.cnblogs.com/lei0213/p/8595030.html
測試
1、服務器客戶端全部關閉selinux和firewalld及iptables(或者允許873端口通過)
2、服務端啟動rsync服務即可(進入/data/www準備刷新)
3、客戶端啟動腳本。
4、在客戶端進入客戶端的/data/www目錄下建立文件,更改內容。
5、服務器端刷新
6、客戶端會把www整個目錄傳到服務器端的/data/www下,等於在/data/www/下又出現了一個www目錄。
centos7只rsync+inotify