【发布时间】:2011-11-04 11:42:50
【问题描述】:
我有 2 台机器,每台机器都运行一个进程。机器 A 上的 shell 进程将向机器 B 发送一些东西,而 B 上的 java 进程将使用这些文件。两个进程都作为 crontab 任务运行。
如何实现同步/原子性等?如何表示已写入整个文件。
因此 B 上的进程始终可以访问最新和完整的文件,处理程序不会过时..
【问题讨论】:
标签: java process synchronization atomic
我有 2 台机器,每台机器都运行一个进程。机器 A 上的 shell 进程将向机器 B 发送一些东西,而 B 上的 java 进程将使用这些文件。两个进程都作为 crontab 任务运行。
如何实现同步/原子性等?如何表示已写入整个文件。
因此 B 上的进程始终可以访问最新和完整的文件,处理程序不会过时..
【问题讨论】:
标签: java process synchronization atomic
假设您正在使用具有原子移动的文件系统,您可以做到这一点。或者使用符号链接。
A 将文件复制到 B 上的临时位置。上传完成后,它会通过移动或符号链接将文件重新定位到预期位置。然后 B 只能看到完全上传的文件。
如果您在 A 上的进程无法通过 SSH 连接到 B 以进行最后一步,则可以添加另一个指示上传完成的零字节标记文件。
A 上传 FOO.txt,上传完成后,它会创建 FOO.txt.done 文件。 B 然后扫描目录中的 *.done 文件,并使用关联的数据文件。当然还有清理。
【讨论】:
ssh user@host 'mv /path/a /path/b' :)
可以通过使用用户控制来解决问题的快速解决方法/解决方案所有权/权限,以便 B 上的进程能够访问该文件。
【讨论】:
我可以建议我猜的一些技巧。您可以:-
【讨论】: