linux - 使用 lsyncd 使用远程源更新本地文件夹?

标签 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 存在,有什么提示我做错了吗?

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

谢谢!

最佳答案

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

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

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

设置完成后即可使用,但老实说,您可能会发现使用 SyncThing 更容易。

关于linux - 使用 lsyncd 使用远程源更新本地文件夹?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36457567/

相关文章:

rsync - 在 rsync 中使用 --cvs-exclude 突然忽略核心文件夹?

linux - 循环遍历目录和 rsync 内容

ssh - 删除文件时lsyncd不尊重ssh用户

linux - Laravel 搞砸了 Homestead 权限

logging - 使用 rsync 检索日志文件

Java:如何让 File.listOfFiles 在 Linux 上非递归工作?

linux - 使用 Lsyncd 保留文件的所有权

linux find命令不必要的数据

linux - 如何使 Raspberry Pi 作为本地 Web 服务器可访问?