情境: 我有一个进程,其中许多文件被Host1,Host2,Host3,Host4复制(scp'd)到DestinationServer。转到相同的公共目录:DestinationServer:/ home / target。所有文件都是唯一的,因此不会覆盖任何文件。 Host1-Host4将有一个cronjob,它将向DestinationServer启动他们的scp脚本。需要注意的是,主机位于不同的时区,位置。所以,他们将在不同的时间完成。
需要: 由于文件被scp到Destination:/ home / target,以编程方式检查来自其他主机的scp何时完成的最佳方法是什么?
选项: 我的选择是以编程方式在perl或shell中执行此操作(如果可能)。
我该寻找什么,我可以使用哪些unix命令或perl模块来帮助确定进程何时完成?任何想法,例子都会很棒!感谢。
答案 0 :(得分:4)
使用Maildir方法:将所有文件复制到临时目录,然后在传输完成后,原始主机通过ssh执行重命名到目标目录。这样,当文件出现在目标目录中时,您就知道它已完成。
我建议这样做,因为如果您只是将文件scp到目标目录并以任何方式监视目录,则无法区分完全传输与中断的scp命令或网络故障。
答案 1 :(得分:0)
答案 2 :(得分:0)
与Jouni类似但另类的方法是使用信号量文件。在scp-ing文件之前,发起主机会发出信号量文件,完成后将其删除。所以你知道,现在是时候了。