首先準備兩臺服務器(centos7)html
A:192.168.75.160 git
B:192.168.75.161 github
A機器當作客戶端,B機器當作服務端shell
rsync 安裝vim
客戶端服務器端都要安裝rsync ,可是客戶端A不須要啓動,服務器端B須要啓動centos
接下來先安裝rsync,能夠用源碼安裝,從rsync官網:rsync.samba.org,下載源碼包,或者用yum安裝bash
1)源碼安裝:服務器
能夠進到 https://rsync.samba.org/ftp/rsync/下載socket
也能夠用wget下載工具
# tar -xzvf rsync-3.1.3.tar.gz
# ./configure (默認的安裝路徑是/usr/local 能夠經過 ./configure --help查看到)
# make && make install
安裝完成,若是須要開機啓動的話,須要把rsync啓動命令放到 rc.local 文件中,服務端須要開機啓動,客戶端不須要
echo "/usr/local/bin/rsync --daemon --config=/etc/rsyncd.conf" >>/etc/rc.local
2)rpm安裝(yum)
# yum install rsync
yum 安裝會把rsync安裝到 /usr/bin目錄下,而且會生成 /etc/xinetd.d/rsync文件;
若是想要開機啓動和源碼安裝方式相同,還有另外方法:
用yum安裝時,會生成/etc/xinetd.d/rsync文件
centos7 下 rsync 默認會以xinetd方式運行rsync服務,因此只需啓動xinetd服務便可
可是要修改下配置文件/etc/xinetd.d/rsync
1 # default: off 2 # description: The rsync server is a good addition to an ftp server, as it \ 3 # allows crc checksumming etc. 4 service rsync 5 { 6 disable = no 7 flags = IPv6 8 socket_type = stream 9 wait = no 10 user = root 11 server = /usr/bin/rsync 12 server_args = --daemon --config=/etc/rsyncd.conf 13 log_on_failure += USERID 14 }
配置完畢後 ,還須要安裝xinetd包,不然xinetd服務沒法啓動,
# yum install xinetd 安裝
# /etc/init.d/xinetd start 啓動
# chkconfig xinetd on 設置開機啓動
# netstat -tunlp | grep 873 檢查是否啓動成功
rsync配置
服務器端配置:
rsync服務器端須要兩個配置文件 rsyncd.conf rsyncd.password
1)rsyncd.conf文件
rsyncd.conf 默認放在/etc 目錄下此文件須要手動建立,是rsync服務的主配置文件;rsyncd.password 主要 用戶存儲rsync用戶名和密碼
uid = root gid = root use chroot = no max connections = 10 timeout=600 log file = /var/run/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsyncd.lock [backup] path = /root/backup/ ignore errors read only = no list = no auth users = cap secrets file = /etc/rsyncd.password host allow = 192.168.75.160
rsync默認是在nobody用戶下運行,爲了以後因爲不明權限問題影響,此處uid=root用戶
[backup]爲要同步的模塊名稱 能夠隨意命名,但以後用到模塊須要名稱保持一致 ,能夠有多個模塊,此處指舉了一個例子
path 爲該模塊要同步的目錄
auth users 爲用戶,這個用戶是本身命名,跟系統用戶沒有關係,是在 rsyncd.password 文件中與之對應的
secrets file 爲用戶、密碼文件
2) rsyncd.password
只需添加 用戶名 : 密碼便可 (能夠有多組用戶名和密碼)
# vim /etc/rsyncd.password
cap:cap
建立完成以後更改這個文件的權限爲600
# chmod 600 /etc/rsyncd.password
建立完畢以後,須要對模塊中的目錄受權
chown root:root -R /root/backup/
客戶端配置
客戶端配置只須要建立 /etc/rsyncd.password文件
客戶端rsyncd.password文件裏面只須要添加密碼便可,不須要用戶,可是有多個用戶名和密碼時,注意與服務器端rsyncd.password文件順序對應上
# vim /etc/rsyncd.password
cap
一樣受權 600
# chmod 600 /etc/rsyncd.password
啓動rsync服務
若是使用源碼安裝rsync 使用 rsync-daemon 來啓動rsync
# echo PATH=$PATH:/usr/local/bin/ >> /etc/profile # source /etc/profile # rsync -daemon # ps aux | grep rsync # netstat -tunlp | grep 873
若是 rsync 的配置文件不在 /etc/目錄下,那麼啓動時須要在參數中手動加上配置文件路徑,好比
rsync --daemon --config=/RSYNCPATH/
若是用yum安裝
/etc/init.d/xinetd start
中止服務
源碼安裝中止方法
# pkill rsync
yum安裝中止方法
/etc/init.d/xinetd stop
inotify的安裝
再客戶端進行安裝,inotify主要功能是監視客戶端被監控目錄是否有變化,若是有變化,就向服務器端進行推送
先查看當前系統是否支持inotify
[root@VM_8_32_centos ~]# ll /proc/sys/fs/inotify total 0 -rw-r--r-- 1 root root 0 Dec 18 15:50 max_queued_events -rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_instances -rw-r--r-- 1 root root 0 Dec 18 15:50 max_user_watches
顯示這三個文件證實支持
這三個文件說明
max_user_watches:設置inotifywait或inotifywatch命令能夠監視的文件數量(單進程) max_user_instances:設置每一個用戶能夠運行的inotifywait或inotifywatch命令的進程數。 max_queued_events:設置inotify實例事件(event)隊列可容納的事件數量。
安裝inotify方式能夠用源碼包安裝 也能夠用yum安裝
源碼安裝:
# wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz # tar -xzvf inotify-tools-3.14.tar.gz # cd inotify-tools-3.14 # ./configure --prefix=/usr/local/inotify # make # make install
[root@VM_8_32_centos bin]# ls /usr/local/inotify/bin/
inotifywait inotifywatch
一共安裝了2個工具(命令),即inotifywait和inotifywatch
inotifywait:在被監控的文件或目錄上等待特定文件系統事件(open、close、delete等)發生,執行後處於阻塞狀態,適合在shell腳本中使用。
inotifywatch:收集被監視的文件系統使用度統計數據,指定文件系統事件發生的次數統計
接下來編寫腳本,rsynctest.sh
#!/bin/bash # src=/root/backup/ des=backup host=192.168.75.161 user=cap /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.password $src $user@$host::$des echo "${files} was fsynced " >>/tmp/rsync.log 2>&1 done
運行rsynctest.sh腳本,這個腳本是我在網上找的,有個問題就是裏面 inotifywait 監控到變化的 files 變量 ,在下面rsync中實際並無用到,這樣每次雖然監控到是哪些文件有變化,可是rsync都是作的全量同步,又找了其餘文檔,有以下寫法
#!/bin/bash # src=/root/backup/ user=cap host=192.168.75.161 des=backup /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' -e modify,delete,create,attrib,close_write,move $src | while read file do INO_EVENT=$(echo $file | awk '{print $4}') INO_FILE=$(echo $file | awk '{print $3}') echo "------------------------------$(date)--------------------------" echo "$file" echo "$INO_EVENT" echo "$INO_FILE" if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]] then echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO' rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]] then echo 'DELETE or MOVED_FROM' rsync -avzcR --delete --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi if [[ $INO_EVENT =~ 'ATTRIB' ]] then echo 'ATTRIB' if [ ! -d "$INO_FILE" ] then rsync -avzcR --password-file=/etc/rsyncd.password $(dirname ${INO_FILE}) $user@$host::${des} fi fi done
如今能夠進行測試,在客戶端 /root/backup/ 目錄下進行文件操做(增刪改查等),服務器端會隨之更新變化
PS
rsync --delete /空目錄 /要刪除的目錄
ctrl + R --> 輸入歷史命令的關鍵字 --> 按下右光標鍵
參考文獻:https://yq.aliyun.com/articles/43197
https://www.ilanni.com/?spm=a2c4e.11153940.blogcont43197.26.1aad7857f1yu9o&p=8513
https://www.cnblogs.com/hackerer/p/5243639.html
https://www.cnblogs.com/ginvip/p/6430986.html