启动 Rsync 守护进程以在两台服务器之间同步目录

启动 Rsync 守护进程以在两台服务器之间同步目录

我想将服务器A上的目录同步到服务器B上。

在服务器上,AI创建了一个文件rsyncd.conf,内容如下:

uid             = rsync
gid             = rsync
use chroot      = no
pid file        = /var/run/rsyncd.pid

[share]
  comment = share
  path = /etc/dirtosync
  read only = false
  list = yes
  hosts allow = *
  auth users = rsync
  secrets file = /etc/rsyncd.secrets

我在服务器 A 上创建了/etc/rsyncd.secrets以下内容的文件:

rsync:rsync

我还在服务器 A 上创建了 pid 文件,以及用户 rsync 和密码 rsync。

在服务器 A 上,在文件上:/etc/default/rsync我将值设置RSYNC_ENABLEtrue,然后使用以下命令启动 rsync 守护程序:

/etc/initd/rsync start

在服务器A和服务器B上目录的所有者和组都是rsync。

我在机器 B 上启动了以下命令:

rsync -avzr rsync@<serverA>:/etc/dirtosync/* /etc/dirtosync/

我也在服务器 A 上尝试了该命令

rsync -avzr /etc/dirtosync/* rsync@<serverB>:/etc/dirtosync/

使用这两个命令的结果是一样的:当我启动命令时,文件只同步一次,但是之后如果我修改服务器 A 中的文件,它们就不会同步到服务器 B

我是否需要做其他事情来保持文件同步?

答案1

您误解了 rsync 的工作原理。rsync 不会自动复制更改 - 它不像 dropbox 或类似软件。rsync 每次运行时仅同步一次文件。如果您想更频繁地同步,请将 rsync 命令放入 cron 脚本中(例如查看/etc/cron.daily)。如果您想要像 Dropbox 那样自动同步更改,请查看其他项目,例如闪耀分享或者ownCloud

答案2

您也可以使用 lsyncd:https://github.com/axkibe/lsyncd。我至今还在使用,效果非常好。

答案3

您发布的语法rsync假设您省略了机器的主机名/IP,但不使用rsync您设置的共享。要使用共享,您需要按如下方式更改语法以使用共享:

rsync -av rsync@MACHINE-A::share/ /etc/dirtosync/

但是,这仍然无法在这些文件夹之间建立持续同步。您似乎想要的是这些文件夹的双向同步,您可以在 cron 中设置它,也可以开始使用Unison 文件同步软件

Unison 的维护工作已经不怎么好了,我自己也没有用过,但我听说它很好用。它会跟踪您为同步而设置的目录中的文件更改,并定期使用rsync或其他(可配置)方法复制这些文件。

如果您要使用rsync-in-the-cron 路线,您将需要使用仅复制较新文件-u的选项rsync。但是,使用这种方法会遇到已删除文件重新出现的问题。

相关内容