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 的高亮支持,寄

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。