我在两台计算机上都有一个根文件夹(我交替运行程序)。假设:
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