0

我使用 lsyncd 将本地文件夹同步到我拥有的服务器,使用 rsyncssh 和这样的配置文件:

settings = {
        logfile = "/var/log/lsyncd/lsyncd.log",
        statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
        default.rsyncssh,
        source = "/Users/user/source",
        host = "root@xxx.xxx.xxx.xxx",
        targetdir = "/tmp/data",
        rsync = { binary = "/usr/local/bin/rsync" }
} 

现在,我想执行“拉”以将另一台机器(不同网络)上的本地目录与该远程服务器同步。

我正在使用这个配置文件:

settings = {...}
sync {
        default.rsync,
        source = "root@xxx.xxx.xxx.xxx:/tmp/data",
        target = "/home/user/dest",
        rsync = { binary = "/usr/local/bin/rsync", _extra = { "-P", "-e", "ssh" } }
}

但我收到了这个错误:

Error: failure getting absolute path of [root@xxx.xxx.xxx.xxx:/tmp/data]
Error: Cannot access source directory: root@xxx.xxx.xxx.xxx:/tmp/data

当然 /tmp/data 存在,任何提示我做错了什么?

你知道是否可以使用 lsyncd 和 rsync,就像我使用它来使本地文件夹与远程源保持“最新”一样?或者我可以将 rsyncssh 与远程源一起使用吗?

谢谢!

4

1 回答 1

1

lsyncd 不能这样做,因为它不是这样设计的。它旨在使用 inotify 事件来监视目录,然后启动 rsync 来完成繁重的工作。inotify 本质上是一个本地概念,lsync 本身实际上并不进行任何网络通信。

您需要做的是在服务器上运行一个 lsyncd 服务,该服务将启动一个配置为连接到您的客户端计算机的 rsync。

这意味着您需要在本地计算机上设置 ssh 服务器。如果您的机器没有合适的域名/IP 地址,或者位于 NAT 或防火墙之后,那么您需要设置一个ssh -R反向隧道并通过它路由您的服务器到客户端的 rsync。

一旦设置好它就可以工作,但老实说,您可能会发现使用 SyncThing 更容易。

于 2016-04-11T13:08:42.927 回答