通过 SSH 在两台 Linux 机器上自动同步目录

通过 SSH 在两台 Linux 机器上自动同步目录

我在两台计算机上都有一个根文件夹(我交替运行程序)。假设:

server0:
  -my_dir
    --subdir0
    --subdir1
server1:
  -my_dir
    --subdir0
    --subdir1

因此,我在 server0 上有批处理作业,将更新这些目录中的某些文件。我在 server1 上有交互式作业,也将更新这些文件。保证我永远不会同时更新同一个文件。

我可以通过 SSH 从 server1 访问 server0。

我查看了应该可以实现这一点的解决方案。osync 和 unison 似乎都可以实现这一点。但它们都只能从一台机器触发。因此,例如,server0 上的文件更新不会触发更新。只有 server1 上的更新才会触发。

rsync 也存在同样的问题。如果 rsync 在两台服务器上运行,则很有可能出现竞争情况,即两台服务器来回传递相同的文件。

有人知道这个问题的解决方案吗?

答案1

一个解决方案是在每个服务器上运行 inotifywait,它将检测新存在的文件我的目录 然后一旦创建了新文件,它将使用 rsync 将文件复制到另一台服务器,如果文件已存在于目标服务器上,则忽略它,这是一个基本想法:

服务器0观点看法 :

inotifywait -m -r -e create --format '%w%f' "{my_dir}" | while read NEWFILE
do    
rsync --ignore-existing "$NEWFILE" "$server1":"$my_dir"
done

相关内容