2017年12月21日 11:17:46 碼農下的天橋 閱讀數:2210 標籤: centosrsync同步 更多html
我的分類: 後端java
所屬專欄: 研發模式及運維web
版權聲明:本文爲博主原創文章,未經博主容許不得轉載。 https://blog.csdn.net/cdnight/article/details/78861543vim
安裝運行:後端
yum -y install rsync #啓動rsync服務 systemctl start rsyncd.service systemctl enable rsyncd.service #檢查是否已經成功啓動 netstat -lnp|grep 873
好了,好了。安裝成功。centos
配置:
首先,配置文件在:
/etc/rsyncd.conf服務器
vim /etc/rsyncd.conf
看到:java-web
好了,先修改爲:運維
uid = root # //設置運行rsync 進程的用戶 gid = root use chroot = no max connections = 4 # pid file = /var/run/rsyncd.pid #//CentOS7中yum安裝不需指定pid file 不然報錯 lock file=/var/run/rsyncd.lock log file = /var/log/rsyncd.log # //此文件定義完成後系統會自動建立 exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes # //同步時跳過沒有權限的目錄 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # //傳輸時不壓縮的文件
重啓:svn
systemctl restart rsyncd.service
好了,上面配置完rsync了,那麼接下來,假設有兩臺服務器,開發服務器dev及線上測試環境test,如今須要從dev將可運行代碼更新到test上面去。
注意:每一次傳輸文件客戶端將告訴服務端須要調用哪一個傳輸規則進行傳輸,而傳輸規則以下:
[simba] //此名字即客戶端使用rsync來同步的路徑 path=/usr/local/simba //實際須要同步的路徑 comment=simba //和中括號里名字同樣就行 ignore errors read only=no //表示能夠pull write only=no //表示能夠push list=no auth users=rsyncuser //客戶端獲取文件的身份此用戶並非本機中確實存在的用戶 secrets file=/etc/rsyncd.passwd //用來認證客戶端的祕鑰文件 格式 USERNAME:PASSWD 此文件權 //限必定須要改成600,且屬主必須與運行rsync的用戶一致。 hosts allow=* //容許全部主機訪問
好了,咱們本身作一個規則,假定test上面接收的目錄是: /data/www/helloRsync
#建立目錄 mkdir /data/www/helloRsync
而dev上面也是。。。
請自行建立。
那麼在test上面的/etc/rsyncd.conf添加規則:
#規則名稱,做爲測試用規則,直接用這個算了。 [helloRsync] #同步的路徑 path=/data/www/helloRsync #規則描述 comment=測試規則 ignore errors #是否能夠pull read only=no #是否能夠push write only=no list=no #下面配置同步時候的身份,注意該身份是在rsync裏面定義的,並不是是本機實際用戶。等下說說如何在rsync裏面定義身份。 #客戶端獲取文件的身份此用戶並非本機中確實存在的用戶 auth users=rsyncuser #//用來認證客戶端的祕鑰文件 格式 USERNAME:PASSWD 此文件權 #//限必定須要改成600,且屬主必須與運行rsync的用戶一致。 secrets file=/etc/rsyncd.passwd #容許全部主機訪問 hosts allow=*
給rsync定義身份,以下:
echo 'rsyncuser:123456'>/etc/rsyncd.passwd //文件用戶名和路徑爲上面定義,別寫錯,密碼本身定 chmod 600 /etc/rsyncd.passwd //修改權限
重啓服務。
systemctl restart rsyncd.service
客戶端的配置
1。建立密碼。
echo '123456' >>/etc/rsyncd-test.passwd //注意這裏只須要服務器rsyncd.passwd 中的密碼 chmod 600 /etc/rsyncd-test.passwd
爲了測試順利,咱們添加一些文件進行同步,譬如:
echo 'test,hello'>> /data/www/helloRsync/readme.txt
好了,同步:
rsync -auv --password-file=/etc/rsyncd-test.passwd rsyncuser@120.x.x.x::helloRsync /data/www/helloRsync/
看看服務器上面對應目錄
檢查緣由
test上面看日誌:
vim /var/log/rsyncd.log
好了,
auth user 是錯的,要用 auth users,也是醉了,都沒發現嗎?
改過之後重啓rsync服務,在嘗試
獲得:
name or service not kunown
據查這不是問題,懷疑,是rsync命令問題,應該是將test的文件下載下來了,因而將目錄調換一下順序,獲得:
rsync -auv --password-file=/etc/rsyncd-test.passwd /data/www/helloRsync/ rsyncuser@120.x.x.x::helloRsync
報錯:
好了,是沒有放開權限:
放開之後重啓終於成功了。淚流滿面。坑爹丫。
一份真實環境用的更新腳本demo
src="/usr/local/webroot/java-web-bld" rsync -rauvvt --progress \ --password-file=/etc/rsyncd-test.passwd \ --exclude="console/data" \ --exclude=".svn" \ --exclude="WEB-INF/logs" \ --exclude="res/upload" \ --exclude="WEB-INF/upload" \ --exclude="WEB-INF/temp" \ --exclude="env.properties" \ /usr/local/webroot/java-web-bld/ rsyncuser@xxx.xx.xx.xxx::backend