rsync單向同步

系統版本:Centos X64 6.4(最小化安裝)web

先安裝依賴包shell

1 [root@localhost ~]# yum install vim wget lsof gcc make cmake makeconf autoconf automake openssh -y
View Code


開始下載安裝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
View Code

 

安裝完畢後命令的絕對路徑:/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
View Code

 

同步本地目錄下的文件到遠程主機

命令格式:rsync -av --delete 本地目錄絕對路徑/  遠程主機用戶名@遠程主機地址:遠程絕對路徑

1 [root@localhost ~]# rsync -a --delete /etc/ root@192.168.1.100:/tmp
View Code

 

把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
View Code

賬號密碼文件/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
View Code

啓動服務端程序

1 [root@localhost ~]# /usr/local/bin/rsync --daemon
View Code

也能夠指定配置文件啓動:/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 
View Code

客戶端同步命令格式:/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
View Code

 

出錯的排查方法

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
相關文章
相關標籤/搜索