rsync3.1.3的编译安装和常用操作

本文详细介绍rsync软件的编译安装过程,配置文件解析,启动脚本编写,以及通过多个示例展示如何使用rsync进行高效的数据同步,包括跨机房同步策略。
1.rsync的编译安装

tar -zxf rsync-3.1.3.tar.gz
cd rsync-3.1.3
./configure --prefix=/usr/local/rsync-3.1.3 --disable-ipv6

2.rsync的配置文件:
[root@web3:~]# more /usr/local/rsync/etc/rsyncd.conf
uid = apache
gid = users
port = 873
use chroot = no
#hosts allow = 192.168.9.3
#hosts deny =  192.168.10.0/24
pid file = /usr/local/rsync/rsyncd.pid
lock file = /usr/local/rsync/rsync.lock
#log file = /usr/local/rsync/logs/rsyncd.log

[apache]
comment=all web
path=/
read only=no

secrets file=/usr/local/rsync/etc/rsyncd.passwd
auth users=apache

密码文件:
[root@web3:~]# cat /usr/local/rsync/etc/rsyncd.passwd
apache:apachepass

3.rsync的启动脚本
[root@web3:~]# cat /etc/init.d/rsync 
#!/bin/bash 
 
#this script for start|stop rsync daemon service 
#date:2012/2/13 
 
status1=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep') 
#pidfile="/etc/rsync/rsyncd.pid"
pidfile="/usr/local/rsync/rsyncd.pid"
#start_rsync="rsync --daemon --config=/etc/rsync/rsyncd.conf" 
 start_rsync="rsync --daemon --config=/usr/local/rsync/etc/rsyncd.conf" 
function rsyncstart() { 
 
    if [ "${status1}X" == "X" ];then 
 
        rm -f $pidfile       
 
        ${start_rsync}   
 
        status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep') 
         
        if [  "${status2}X" != "X"  ];then 
             
            echo "rsync service start.......OK" 
             
        fi 
 
    else 
 
        echo "rsync service is running !"    
 
    fi 
} 
 
function rsyncstop() { 
 
    if [ "${status1}X" != "X" ];then 
     
        kill -9 $(cat $pidfile) 
 
        status2=$(ps -ef | egrep "rsync --daemon.*rsyncd.conf" | grep -v 'grep') 
 
        if [ "${statusw2}X" == "X" ];then 
             
            echo "rsync service stop.......OK" 
        fi 
    else 
 
        echo "rsync service is not running !"    
 
    fi 
} 
 
 
function rsyncstatus() { 
 
 
    if [ "${status1}X" != "X" ];then 
 
        echo "rsync service is running !"   
     
    else 
 
         echo "rsync service is not running !"  
 
    fi 
 
} 
 
function rsyncrestart() { 
 
    if [ "${status1}X" == "X" ];then 
 
               echo "rsync service is not running..." 
 
               rsyncstart 
        else 
 
               rsyncstop 
 
               rsyncstart    
 
        fi       
}  
 
case $1 in 
 
        "start") 
               rsyncstart 
                ;; 
 
        "stop") 
               rsyncstop 
                ;; 
 
        "status") 
               rsyncstatus 
               ;; 
 
        "restart") 
               rsyncrestart 
               ;; 
 
        *) 
          echo 
                echo  "Usage: $0 start|stop|restart|status" 
          echo 
esac


# 自动启动rsync服务脚本
[root@web3:~]# cat /usr/local/zabbix_agents_3.2.0/scripts/start_rsy.sh 
#!/bin/bash
count_num=`ps -ef|grep 'rsync --daemon'|grep -v grep|wc -l`
echo $count_num
rm -f /usr/local/rsync/rsyncd.pid
if [ $count_num -eq 0 ];then
/etc/init.d/rsync start
fi

###########使用rsync同步脚本的示例

# vim /usr/local/worksh/jenkins_task/rsync_cbs_chinasoft_com.sh

#!/bin/bash

##############jenkins拉取git代码同步到web3上,然后触发web3上的该脚本进行 ws/eus/eop 三个机房同步####################
###### rsync cbs.chinasoft.com data ######################################
passwd="/data/www/.rsync/rsyncd.pass"

# ws_cbs_ip
ws_cbs_ip_list="192.168.254.1 192.168.254.2"

# eus_cbs_ip
eus_cbs_ip_list="1.1.1.1"

# eop_cbs_ip
eop_cbs_ip_list="2.2.2.2"

#############################################################

# 同步所有机房
function cbs_rsync_all()
{
# rsync ws_cbs
for ws_cbs_ip in $ws_cbs_ip_list
do    
    echo "####################rsync ws_cbs start################################"
        echo $ws_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$ws_cbs_ip::apache/data/cbs.chinasoft.com/
   # 添加如下对执行结果的判断,如果执行失败就退出程序,这样可以避免当代码要求强一致的时候,有些没有同步到也报success

    if [[ $? == 0 || $? == 23 ]];then
      rsync_edit=1
     else
      rsync_edit=0
      echo "`date` rsync发布失败! -> editUrls.txt"
      exit 1
    fi

    echo "################### rsync ws_cbs end #######################"
done


# rsync eus_cbs
for eus_cbs_ip in $eus_cbs_ip_list
do    
    echo "####################rsync eus_cbs start################################"
        echo $eus_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$eus_cbs_ip::apache/data/cbs.chinasoft.com/
    echo "################### rsync eus_cbs end #######################"
done

# rsync eop_cbs
for eop_cbs_ip in $eop_cbs_ip_list
do    
    echo "####################rsync eop_cbs start################################"
        echo $eop_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$eop_cbs_ip::apache/data/cbs.chinasoft.com/
    echo "################### rsync eop_cbs end #######################"
done

}

# 只同步网宿机房
function cbs_rsync_ws()
{
# rsync ws_cbs
for ws_cbs_ip in $ws_cbs_ip_list
do    
    echo "####################rsync ws_cbs start################################"
        echo $ws_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$ws_cbs_ip::apache/data/cbs.chinasoft.com/
    echo "################### rsync ws_cbs end #######################"
done
}


# 只同步美西机房
function cbs_rsync_eus()
{
# rsync eus_cbs
for eus_cbs_ip in $eus_cbs_ip_list
do    
    echo "####################rsync eus_cbs start################################"
        echo $eus_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$eus_cbs_ip::apache/data/cbs.chinasoft.com/
    echo "################### rsync eus_cbs end #######################"
done
}


# 只同步欧洲德国机房
function cbs_rsync_eop()
{
# rsync eop_cbs
for eop_cbs_ip in $eop_cbs_ip_list
do    
    echo "####################rsync eop_cbs start################################"
        echo $eop_cbs_ip
    rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@$eop_cbs_ip::apache/data/cbs.chinasoft.com/
    echo "################### rsync eop_cbs end #######################"
done
}


#####################  MAIN  ###############################
usage () {
        echo ""
        echo "  Please Input server infomation!"
        echo ""
        echo "  USAGE: `basename $0` [all|cbs_ws|cbs_eus|cbs_eop]"
        echo ""
}
    
if [ $# != 1 ]
then
        usage >&2
        exit 1
fi
OPT=$1
case $OPT in
all)
        echo "start rsync `basename $0` to all cbs servers"
        cbs_rsync_all
        ;;
cbs_ws)
        echo "start rsync `basename $0` to ws_cbs_servers"
        cbs_rsync_ws
    ;;
cbs_eus)
        echo "start rsync `basename $0` to eus_cbs_servers"
    cbs_rsync_eus
        ;;
cbs_eop)
        echo "start rsync `basename $0` to eop_cbs_servers"
        cbs_rsync_eop
        ;;

*)
        echo "Usage:`basename $0` [all|cbs_ws|cbs_eus|cbs_eop]"
        ;;
esac

#########脚本使用示例
./rsync_cbs_chinasoft_com.sh all # 同步所有机房
./rsync_cbs_chinasoft_com.sh cbs_eus # 同步美西机房


常用示例:
1.推送本地文件目录 /data/cbs.chinasoft.com 到远程服务器的 /data/cbs.chinasoft.com/ 目录:

rsync -zavP --delete --exclude=logs/ --exclude=cache/ --password-file=$passwd /data/cbs.chinasoft.com/ apache@192.168.3.10::apache/data/cbs.chinasoft.com/

2.主动拉取远程服务器的目录
[root@localhost 2018-11]# cat /opt/platform/rsync_datacollection_new_wuchao.sh
#!/bin/bash
SIP="192.168.10.207"

ps -ef | grep "${SIP}::apache/opt/platform/downloader/all" | grep -v grep | awk '{print $2}' | xargs kill -9 
ps -ef | grep "${SIP}::apache/opt/platform/datacollection/all" | grep -v grep | awk '{print $2}' | xargs kill -9 

DATE_1="`date -d '-1 day' +%Y-%m`"
DATE0="`date -d '0 day' +%Y-%m`"

for a in `seq -2 0`
do

DATE="`date -d "${a} day" +%Y-%m`"
# 拉取远程服务器 192.168.10.207 上 的 /opt_log/platform_logs/datacollection/all/ 目录到本地的 /opt/platform/datacollection/all/ 目录
/usr/bin/rsync -avrp -P --password-file=/etc/rsnyc_for_logs_by_Wanjie.scrt apache@${SIP}::apache/opt_log/platform_logs/datacollection/all/$DATE /opt/platform/datacollection/all/
/usr/bin/rsync -avrp -P --password-file=/etc/rsnyc_for_logs_by_Wanjie.scrt apache@${SIP}::apache/opt_log/platform_logs/downloader/all/$DATE /opt/platform/downloader/all/



#########################




cms_back主动拉取cms远程服务器的db数据进行备份
[root@localhost 2018-11]# cat /opt/cms_dbback.sh
#!/bin/bash
SIP="192.168.1.3"

ps -ef | grep "${SIP}::apache/data/MySQL_Data_Backup" | grep -v grep | awk '{print $2}' | xargs kill -9 

# 拉取远程服务器cms 192.168.1.3 上 的mysql数据库备份 /data/MySQL_Data_Backup 目录到本地的 /data/cmsdb_back/ 目录
/usr/local/rsync/bin/rsync -avrp -P --password-file=/opt/cmsdbback.pass apache@${SIP}::apache/data/MySQL_Data_Backup /data/cmsdb_back/

 

转载于:https://www.cnblogs.com/reblue520/p/10011779.html

<think>好的,我现在需要帮助用户了解如何从源码编译安装rsync。首先,我得回忆一下自己之前学过的相关知识,或者查找相关的资料。根据用户提供的引用内容,特别是引用[1]、[3]、[4][5],里面提到了源码编译安装rsync以及相关的步骤,比如make install、配置、使用inotify等。 首先,我应该整理出一个清晰的步骤流程。用户需要的是详细的步骤教程,所以需要分步骤说明。通常,从源码安装软件的步骤一般是:下载源码包、解压、配置编译安装。不过可能还需要安装依赖库,比如开发工具必要的库文件。 根据引用[1]提到的“安装编译完成后,将静态编译rsync 可执行文件安装到指定目录:sudo make install”,这说明在编译完成后使用make install进行安装。而引用[3]中的“源码编译安装rsync数据同步”也验证了这一点。所以步骤可能包括: 1. 下载源码包 2. 安装编译依赖 3. 解压源码包 4. 配置编译选项(./configure) 5. 编译(make) 6. 安装(make install) 不过,用户提供的引用中没有详细说明如何下载源码包,所以可能需要用户去官方网站下载或者通过其他方式获取。例如引用[5]提到“真机为Linux ]# ls /linux-soft/ ]# ls /linux-soft/1 ]# scp /linux-soft/1/tools.tar.gz root@192.168.4.7:/root/”,这可能是指用户需要将源码包上传到服务器,但具体下载步骤可能需要用户自行获取源码包。 另外,依赖项方面,编译rsync可能需要gcc、make、openssl-devel等开发工具库。比如在Ubuntu系统上可能需要安装build-essential,而在CentOS上可能需要安装gccopenssl-devel等。这部分在引用中没有提到,但属于常规步骤,必须包含,否则用户可能在编译过程中遇到错误。 接下来是配置步骤。通常运行./configure命令,可能还需要指定安装路径或者其他选项。比如用户想要自定义安装路径,可以使用--prefix参数。例如,./configure --prefix=/usr/local/rsync。引用中没有提到具体的配置参数,所以这里可能需要保持默认,或者根据常见做法给出建议。 编译完成后,使用make命令进行编译,然后sudo make install进行安装。引用[1]中明确提到了sudo make install,所以需要强调使用sudo权限。 安装完成后,可能需要进行一些配置,比如设置环境变量,或者验证安装是否成功。比如检查rsync的版本,或者查看可执行文件的位置。例如,使用rsync --version来确认安装成功。 另外,引用[3][4]提到了使用inotify-tools进行实时同步,这可能是在安装rsync后的进一步配置,但用户的问题主要是源码编译安装rsync,所以这部分可能不需要包含在主步骤中,但可以作为相关问题或者后续步骤提到。 需要确保每一步的命令正确,比如解压tar.gz文件使用tar -xf命令,configure的正确执行,以及权限问题。如果有依赖未安装,用户可能会遇到错误,因此需要提前提醒安装依赖项。 总结步骤: 1. 安装编译依赖:gcc、make、openssl-devel等。 2. 下载rsync源码包。 3. 解压源码包。 4. 进入源码目录,运行./configure。 5. 执行make编译。 6. 使用sudo make install安装。 7. 验证安装。 同时,需要注意权限问题,比如使用sudo来执行安装步骤。此外,可能还需要配置环境变量,如果安装路径不在系统的PATH中,用户需要手动添加,或者使用绝对路径来运行rsync。 现在需要检查用户提供的引用是否还有遗漏的步骤。例如,引用[3]中的源码编译安装部分可能涉及更多配置,但根据问题,用户只需要安装rsync本身,而不是配置同步任务或使用inotify,所以主要步骤集中在编译安装过程。 最后,生成相关问题,可能需要根据引用中的内容,比如性能优化、配置同步、实时监控等,生成相关问题。</think>### 从源码编译安装 rsync 的步骤教程 #### **1. 安装编译依赖** 首先安装编译所需的工具依赖库: - **Ubuntu/Debian**: ```bash sudo apt update sudo apt install -y build-essential libssl-dev ``` - **CentOS/RHEL**: ```bash sudo yum groupinstall -y "Development Tools" sudo yum install -y openssl-devel ``` #### **2. 下载源码包** 从 [rsync 官网](https://rsync.samba.org/) 或镜像站点下载源码包(例如 `rsync-3.2.7.tar.gz`): ```bash wget https://download.samba.org/pub/rsync/src/rsync-3.2.7.tar.gz ``` #### **3. 解压源码包** ```bash tar -xzvf rsync-*.tar.gz cd rsync-* ``` #### **4. 配置编译选项** 运行 `configure` 脚本生成编译配置。若需指定安装路径(如 `/usr/local/rsync`),添加 `--prefix` 参数: ```bash ./configure --prefix=/usr/local/rsync ``` 若需静态编译(如引用[1]中的场景),可添加 `--disable-openssl` 或 `--enable-static` 等参数。 #### **5. 编译源码** ```bash make ``` #### **6. 安装到系统** ```bash sudo make install # 默认安装到 /usr/local/bin ``` 若指定了 `--prefix`,安装到自定义目录后,建议将路径加入 `PATH` 环境变量: ```bash echo &#39;export PATH="/usr/local/rsync/bin:$PATH"&#39; >> ~/.bashrc source ~/.bashrc ``` #### **7. 验证安装** ```bash rsync --version ``` 若输出版本信息(如 `rsync 3.2.7`),则安装成功[^1]。 --- ### **配置示例** **基本同步命令**(引用[2]): ```bash rsync -a /source/ /destination/ # -a 表示归档模式(保留属性) ``` **实时同步脚本**(引用[3][^3]): ```bash # 结合 inotifywait 监控目录变化 while /opt/myrpm/bin/inotifywait -rqq /mydir/; do rsync -a --delete /mydir/ root@192.168.4.207:/opt done ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值