我有两台机器都运行一个进程。机器A上的shell进程将scp到机器B,而B上的java进程将使用这些文件。这两个进程都以crontab任务运行。
如何实现同步/原子性等?如何表示已写入整个文件。
因此B上的进程总是可以访问最新和完整的文件,处理程序不会过时...
答案 0 :(得分:2)
假设您正在使用具有原子移动的文件系统,那么您可以这样做。或使用符号链接。
A将文件复制到B上的临时位置。上传完成后,它会使用移动或符号链接将文件重定位到预期位置。 B然后才能看到完全上传的文件。
如果您在A上的进程无法通过SSH进入B进行最后一次移动,则可能会添加另一个零字节标记文件,表明上传已完成。
上传FOO.txt,当上传完成后,它会创建FOO.txt.done文件。然后,B扫描目录中的* .done文件,并使用关联的数据文件。当然还要清理。
答案 1 :(得分:0)
通过使用用户控件,在复制文件时(使用来自A的SCP)设置所有权(和适当的chmod'ing),当完成然后更改时,可以解决问题的快速解决/解决方案所有权/权限,以便B上的进程能够访问该文件。
答案 2 :(得分:0)
我猜可以暗示一些黑客攻击。你可以: -