0

我知道关于这个话题有数百个问题。但我从来没有找到一个明确的例子。

我创建了两个用户,一个是开发人员,另一个是 sftp 上传用户。sftp 上传用户应该能够上传文件和文件夹。这些文件应该会自动同步到开发者文件夹。开发人员现在可以处理和编辑文件。这意味着:当文件被编辑/删除/创建时,同步过程应该意识到这种变化并将其从 sftp 镜像到开发人员,反之亦然。

我已经尝试rsyncinotifywaitwhich 在一个方向上都可以正常工作,但不是在两个方向上都可以。然后我偶然发现了 unison,我发现可以以两种方式同步。现在我刚刚发现,通过 unison,您无法像使用 那样设置新的用户/组权限rsync,这会使 sftp 用户过时。有人可以给我看一下 unison 的示例代码,它将在文件更改/创建/删除时同步两种/home/folder1方式/home/folder2

更新: 我编写了一个 inotifywait bash 脚本,它几乎可以按照我想要的方式工作:

#!/bin/bash
EVENTS="CREATE,CLOSE_WRITE,DELETE,MODIFY,MOVED_FROM,MOVED_TO"
DIR1="/home/dev/project/"
USR1="dev"
DIR2="/home/sftp/uploads/"
USR2="sftp"

while inotifywait -e "$EVENTS" -r "$DIR1"; do
    sudo rsync -avu --delete --chown="$USR2":"$USR2" "$DIR1" "$DIR2"
done &
while inotifywait -e "$EVENTS" -r "$DIR2"; do
    sudo rsync -avu --delete --chown="$USR1":"$USR1" "$DIR2" "$DIR1"
done &
wait

有一个很大的缺陷:在某些情况下,rsync 命令会同时运行,这可能会损坏文件。

所以我更新的问题:

如何使第一个循环的命令仅在第二个循环的命令完成时运行,反之亦然?

4

1 回答 1

0

我不确定您的意思是什么,“通过一致,您无法设置新的用户/组权限。 ” Unison 无法更改setuidandsetgid位,但 Unison确实更改了文件所有者和文件组。有关这方面的更多详细信息,请参阅Unison 手册owner中的和group选项。

通常,您希望开发人员调用 Unison(因为我假设您希望开发人员拥有并控制传输的文件)。然后您应该使用选项调用 Unison,repeat=watch以便 Unison 的实例将监视 sftp 文件的任何更改并立即传输它们。

于 2018-04-05T21:33:15.393 回答