banner
ECSS11

Kita ☆ Kita ☆

试试 Xlog 做博客(并把好久之前写的老文章搬过来)之每年都要换一个网站,也不知道何时是个头。

使用 rsync 定时同步数据

首先我们需要知道 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 的高亮支持,寄

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。