首先我们需要知道 rsync 的基本使用方法,可以通过 man rsync
简单的了解一下。
本地:rsync [选项...] 源... [目标]
通过 SSH 远程连接:
拉取: rsync [选项...] [用户@]地址:源... [目标]
推送: rsync [选项...] 源... [用户@]地址:目标
通过 rsync 监听服务:
拉取:
rsync [选项...] [用户@]地址::源... [目标]
rsync [选项...] rsync://[用户@]地址[:端口]/源... [目标]
推送:
rsync [选项...] 源... [用户@]地址::目标
rsync [选项...] 源... rsync://[用户@]地址[:端口]/目标
只有提供 SRC 参数,而没有 DEST 参数将列出源文件而不是复制。
快速开始#
使用平台:ubuntu 20
如何实现:通过在服务端配置 rsync 监听服务,并在客户端主动推送,并设置 crontab 定时任务。
配置 rsync 监听#
在远程服务器,也就是希望同步文件保存的服务器中,依次执行命令进行判断:
root@ubuntu:~# sudo apt update
root@ubuntu:~# sudo apt install rsync
检查 rsync 环境是否已安装。
root@ubuntu:~# service rsync status
查看 rsync 服务信息。
● rsync.service - fast remote file copy program daemon
Loaded: loaded (/lib/systemd/system/rsync.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-05-09 00:19:13 MSK; 29min ago
Docs: man:rsync(1)
man:rsyncd.conf(5)
Main PID: 6216 (rsync)
Tasks: 1 (limit: 2279)
Memory: 13.0M
CGroup: /system.slice/rsync.service
└─6216 /usr/bin/rsync --daemon --no-detach
使用任意编辑器,或者 cat 打开 rsync.service
服务文件。
[Unit]
Description=fast remote file copy program daemon
Documentation=man:rsync(1) man:rsyncd.conf(5)
ConditionPathExists=/etc/rsyncd.conf
After=network.target
[Service]
ExecStart=/usr/bin/rsync --daemon --no-detach
[Install]
WantedBy=multi-user.target
通过 ConditionPathExists=/etc/rsyncd.conf 我们可以得知 rsync 读取 rsyncd.conf 读取配置文件。
root@ubuntu:~# vim /etc/rsyncd.conf
使用任意编辑器打开配置文件,如果不存在就创建一个,别问怎么创建,建议自行百度。
配置选项#
[custom1]
pid file = /var/run/rsyncd1.pid
...
[custom2]
pid file = /var/run/rsyncd2.pid
...
[custom3]
pid file = /var/run/rsyncd3.pid
...
必须:创建自定义模块,之后连接时会用到。
uid = user1
gid = group1
必须:rsync 模块的用户,不推荐 root,建议使用 adduser --disabled-login [username]
创建一个。
path = /path/to/backup
use chroot = yes
必须:使用 path 定义这个模块的路径,并使用 use chroot 加强安全性。
read only = no
write only = no
可选:是否启用读取或写入,可自行按需求配置。
hosts allow = 154.53.59.237
# 最大连接数
max connections = 4
# 启用传输日志
transfer logging = yes
# 指定日志格式
log format = %t %a %m %f %b
list = no
额外:通过 hosts allow 限制 IP 访问,以及 list 隐藏使用的模块。
客户端连接#
在客户端,同样下载 rsync,使用以下指令测试是否配置成功。
root@vmi819506:~# rsync -avzrn /tmp/test/ rsync://[用户]@[地址][:端口]/[模块]
排错方案#
Q1:无法连接到服务端。
A1:可能是服务端的端口未开放,rsync 默认使用 873 端口监听。
设置定时#
使用 crontab,时间到后自动运行,下面是一个例子(每 5 分钟运行一次 rsync):
5 * * * * [指令]
总结#
那么这篇文章到这里就结束了,之后可能会对本文的一些内容进行补充或修改。
rsync 的配置写起来总感觉不够优雅,也没有 md 的高亮支持,寄