我有一台通过 ftp 上传文件的机器。我想从这台机器上运行 cronjob 和 scp/rsync (只需复制它们)到同一网络中的不同机器。
问题是我不想复制未完成的文件(仍在传输过程中)是否可以检查文件是否完整,然后再复制到另一台服务器?
答案1
您可以使用同步:
Lsyncd 监视本地目录树事件监视器接口(inotify 或fsevents)。它会聚合并组合事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下这是 rsync。
您可以指定暂停之后文件发生更改后将被同步。例如,将其设置为典型上传时间的五倍,您可能就可以了。
答案2
如果lsyncd的想法不符合你的喜好 - 因为“典型上传时间“在像互联网这样的媒体上肯定会出现问题,甚至不考虑更广泛的上传大小(从 32K 到 1234T),只要考虑一下恢复 ftp 传输。好吧,恐怕连我的想法也帮不了你。但如何使用拉索夫?!?
lsof /home/ftp
好吧,在仔细阅读了 lsyncd 文档后,我想我的担忧是源于措辞“典型上传时间" - 似乎没有根据;它监视的默认 inotify 是“CloseWrite”,这看起来很好。YMMV。