【问题标题】:Pull file only when it is completely transferred to source server [duplicate]仅当文件完全传输到源服务器时才拉取文件[重复]
【发布时间】:2018-04-23 11:37:53
【问题描述】:

我需要从源服务器中提取文件。这个文件通常在 500mb+ 左右,并且没有具体的生成时间。

我的拉取脚本每 5 分钟运行一次,但是我想在拉取文件之前确保文件 100% 完全位于源服务器中。无论如何要知道文件是部分传输还是完全传输?

【问题讨论】:

    标签: unix sftp scp


    【解决方案1】:

    有多种方法可以做到这一点。一个可靠的方法是正在写入此文件的源系统,或者在复制完成后创建一个标记文件,您可以检查标记文件是否存在以确保复制完整。还有其他方法,例如在复制完成后重命名文件以指示复制完成。

    如果更改源系统超出您的控制范围,您可以使用“lsof”命令。 Linux lsof 命令列出有关由系统上运行的进程打开的文件的信息。 (lsof 命令本身代表“打开文件列表”。)

    lsof <filename> | wc -l
    

    如果计数为 0,则没有进程使用此文件,这表明文件复制操作已完成。但是,只有当您确定在使用 lsof 检查其状态时没有其他进程打开/使用此文件时,这才有效 希望这会有所帮助

    【讨论】:

    • 我也找到了这个解决方案。谢谢
    • 上传完成后重命名文件似乎是一种简单而体面的方法
    猜你喜欢
    • 2020-02-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-06
    相关资源
    最近更新 更多