系統版本:Centos X64 6.4(最小化安裝)web
先安裝依賴包shell
1 [root@localhost ~]# yum install vim wget lsof gcc make cmake makeconf autoconf automake openssh -y
開始下載安裝vim
1 [root@localhost ~]# wget http://down1.chinaunix.net/distfiles/rsync-3.0.4.tar.gz 2 [root@localhost ~]# tar zxf rsync-3.0.4.tar.gz 3 [root@localhost ~]# cd rsync-3.0.4 4 [root@localhost rsync-3.0.4]# ./configure && make && make install
安裝完畢後命令的絕對路徑:/usr/local/bin/rsyncbash
參數:ssh
-a:表示歸檔模式,用遞歸方式傳輸文件ide
-v:詳細輸出ui
-z:傳輸時對文件進行壓縮處理spa
-r:對子目錄進行遞歸.net
-t:保持文件的時間信息3d
-p:保持文件的權限
-o:保持文件的屬主信息
-g:保持文件的屬組信息
--delete:表示以服務端爲基準進行同步,保持服務端的目錄文件和客戶端的徹底一致
--progress:用於顯示數據同步的過程
--exclude:排除不須要同步的目錄或者文件
同步本地目錄到遠程主機
命令格式:rsync -av --delete 本地目錄絕對路徑(不能帶斜槓) 遠程主機用戶名@遠程主機地址:遠程絕對路徑
若是沒作ssh信任關係的話會須要輸入遠程主機的登陸密碼
1 [root@localhost ~]# rsync -a --delete /etc root@192.168.1.100:/tmp
同步本地目錄下的文件到遠程主機
命令格式:rsync -av --delete 本地目錄絕對路徑/ 遠程主機用戶名@遠程主機地址:遠程絕對路徑
1 [root@localhost ~]# rsync -a --delete /etc/ root@192.168.1.100:/tmp
把rsync做爲服務啓動讓遠程客戶端來同步
rsync服務端:192.168.1.101
rsync客戶端:192.168.1.100
在rsync服務端建立一個默認的配置文件/etc/rsyncd.conf,
內容以下:
1 #指定傳輸文件時守護進程具備的用戶ID,這裏表示默認爲nobady 2 uid=nobady 3 #指定傳輸文件時守護進程具備的用戶組ID,這裏表示默認爲nobady 4 gid=nobody 5 #禁止切換目錄 6 use chroot=no 7 #客戶端的最大鏈接數 8 max connection=10 9 #檢查口令文件的權限,口令文件的權限用戶屬組必須是root,權限必須是600 10 strict modes=yes 11 #pid文件的位置 12 pid file=/var/run/rsyncd.pid 13 #lock文件的位置 14 lock file=/var/run/rsyncd.lock 15 #日誌文件的位置 16 log file=/var/log/rsyncd.log 17 18 #定義模塊名 19 [gamelog] 20 #指定這個模塊須要同步的路徑 21 path=/usr/local/ 22 #這個是註釋 能夠本身定義 23 comment=gamelog file 24 #忽略一些無關的IO錯誤 25 ignore errors 26 #no表明客戶端能夠上傳文件,yes表示只讀取 27 read only=no 28 #no表示客戶端能夠下載文件,yes表示不能下載 29 write only=no 30 #表示容許鏈接的主機地址 31 hosts allow=192.168.1.100 32 #表示不容許鏈接的主機地址 33 hosts deny=* 34 #不容許該模塊被客戶端列出 35 list=false 36 #指定傳輸文件時守護進程具備的用戶ID, 37 uid=root 38 #指定傳輸文件時守護進程具備的用戶組ID, 39 gid=root 40 #用來指定鏈接該模塊的用戶名,用戶名能夠自定義 41 auth users=back 42 #指定密碼文件,文件裏面記錄的是用戶名:密碼 43 secrets file=/etc/srs.pass
賬號密碼文件/etc/srs.pass
1 [root@localhost ~]# ll /etc/srs.pass 2 -rw-------. 1 root root 12 Jul 30 20:49 /etc/srs.pass 3 [root@localhost ~]# cat srs.pass 4 back:123456
啓動服務端程序
1 [root@localhost ~]# /usr/local/bin/rsync --daemon
也能夠指定配置文件啓動:/usr/local/bin/rsync --daemon --config=配置文件絕對路徑
客戶端192.168.1.100
建立密碼文件:
1 [root@localhost etc]# echo "123456" > rsyncd.pass 2 [root@localhost etc]# chmod 600 rsyncd.pass
客戶端同步命令格式:/usr/local/bin/rsync -vzrtopg --delete --progress --exclude "須要排除的目錄和文件" 服務端用戶名@服務端地址::模塊名字 本地目錄 --password-file=密碼文件路徑
1 [root@localhost etc]# rsync -vzrtopg --delete --password-file=/etc/rsyncd.pass back@192.168.1.101::gamelog /tmp/ 2 receiving incremental file list 3 ./ 4 xx 5 6 sent 79 bytes received 177 bytes 512.00 bytes/sec 7 total size is 1214828 speedup is 4745.42
出錯的排查方法
1.查看防火牆是否關閉,或者對873端口添加了白名單,能夠在客戶端telnet 服務端的873端口
2.查看賬號密碼文件的權限和所屬用戶是否正確
shell安裝腳本:
rsync_install.sh
#!/bin/bash function Install_Rsync() { yum install wget gcc make automake makeconf openssh*-y wget http://down1.chinaunix.net/distfiles/rsync-3.0.4.tar.gz tar zxf rsync-3.0.4.tar.gz && cd rsync-3.0.4 ./configure && make && make install } function Create_Rsync_Conf() { cat <<EOF > /etc/rsyncd.conf uid=nobody gid=nobody use chroot=no max connections=10 strict modes=yes pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.pid log file=/var/log/rsyncd.log [WEBSERVER] path=/webserver comment=SHENG file ignore errors read only=no write only=no hosts allow=xxx.xxx.xxx.xxx hosts deny=* auth users=test secrets file=/etc/rsyncd.pass EOF } which rsync if [ $? -eq 0 ] then echo -e "\033[1;32m \033[05m The rsync is Exist! \033[0m" Create_Rsync_Conf echo -e "\033[1;32m The configure file is /etc/rsyncd.conf \033[0m" else echo -e "\033[1;32m Setup rsync \033[0m" Install_Rsync echo -e "\033[1;32m Create config file \033[0m" Create_Rsync_Conf if [ -f /etc/rsyncd.conf ] then echo -e "\033[1;32m The rsync install OK! \033[0m" else echo -e "\033[31m \033[05m The rsync install Fail! \033[0m" fi fi
shell啓動腳本 放在/etc/init.d/ 下 給755權限 chmod 755 /etc/init.d/rsyncd
rsyncd
#!/bin/bash Rsync_Command=`whereis rsync | awk '{print $2}'` function Start() { ${Rsync_Command} --daemon if [ $? -eq 0 ] then echo -e "\033[1;32m The rsyncd start successful...... \033[0m" else echo -e "\033[31m \033[05m The rsyncd start fail !!!!!!!! \033[0m" fi } function Stop() { if [ -f '/var/run/rsyncd.pid' ] then kill -9 `cat /var/run/rsyncd.pid` sleep 1 proce_num=`ps -ef | grep ${Rsync_Command} | grep -v grep | wc -l` if [ ${proce_num} -gt 0 ] then echo -e "\033[31m \033[05m The rsyncd Stop fail !!!!!!!! \033[0m" else echo -e "\033[1;32m The rsyncd Stop successful...... \033[0m" rm /var/run/rsyncd.pid fi else echo -e "\033[31m \033[05m The /var/run/rsyncd.pid file is not exist! Check rsync is Runing ??? \033[0m" fi } function Restart() { Stop sleep 2 Start } case $1 in start) Start ;; stop) Stop ;; restart) Restart ;; *) echo -e "\033[31m \033[05m Use start|stop|restart \033[0m" ;; esac