使用lsyncd更新具有远程源的本地文件夹?

时间:2016-04-06 16:57:06

标签: linux rsync lsyncd

我已经使用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存在,任何提示我做错了什么?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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

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