环境
Linux 环境:CentOS 7.5,rsync 版本为 3.1.2
rsync 安装
绝大多数 Linux 发行版在安装系统时都会预装 rsync。要确认是否已安装,直接执行版本查询命令即可:
rsync --version
rsync 版本检查示例
如果系统中未安装 rsync,也不必担心,有两种安装方法可供选择。
yum 安装(推荐)
这是最快速、最便捷的安装方式,只需一行命令即可完成:
yum install -y rsync
安装完成后,配置文件会自动生成在 /etc/rsyncd.conf 路径下,无需手动创建。
基于源码的安装
如果你想自行控制版本或进行定制化编译,也可以采用源码安装方式。首先下载对应版本的源码包:
wget https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
接着进行解压、配置、编译与安装,操作流程如下:
tar -xvf rsync-3.1.2.tar.gz
cd rsync-3.1.2
./configure --prefix=/usr/local/rsync
make && make install
如果选择源码安装,配置文件 /usr/local/rsync/rsyncd.conf 需要手动创建,其路径与 YUM 安装方式不同,请留意区分。
基于 rsync 的同步脚本
在日常运维中,经常需要将文件批量同步到多台服务器。手动逐台执行命令既繁琐又低效,建议编写一个自动化脚本来完成。以下脚本支持接受任意数量的文件或目录作为参数,并自动将内容推送到所有指定的目标服务器:
#!/bin/bash
# 判断参数
if [ $# -lt 1 ]
then
echo "请传入要同步的文件"
exit;
fi
# 要同步的目标服务器清单
for host in 192.168.1.2 192.168.1.3 192.168.1.4
do
echo ==================== $host ====================
# 向下遍历所有目录,依次发送
for file in $@
do
# 获取父目录,用于创建不存在的目录
pdir=$(cd -P $(dirname $file); pwd)
# 获取当前文件的名称
fname=$(basename $file)
# 创建目录,如果这一步里对应的服务器没有进行免密设置,则需要输入密码
ssh -p 50022 $host "mkdir -p $pdir"
# 执行同步,如果这一步里对应的服务器没有进行免密设置,则需要输入密码
echo "rsync -a v -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdir"
rsync -a v -e 'ssh -p 50022' $pdir/$fname hadoop@$host:$pdir
done
done
脚本的使用方法非常简单:将其放置在 PATH 环境变量所包含的任意目录中(例如 ~/bin,若该目录不存在可自行创建),并赋予执行权限。之后无论在哪个路径下,都可以直接调用。举个例子:将脚本保存为 rsync-all 并放入 ~/bin 目录,然后执行 chmod +x ~/bin/rsync-all。此后,只需一行命令即可同步文件,例如 rsync-all /data/logs/app.log,脚本会自动将文件分发至清单中的所有服务器。
特别提醒:脚本中使用了 ssh -p 50022,表明 SSH 端口并非默认的 22。如果你的服务器同样使用了自定义端口,请相应修改;若使用默认端口,则删除 -p 50022 即可。此外,建议提前配置好免密登录,否则每次同步都需要手动输入密码,将大大降低自动化脚本的实用价值。
