【发布时间】:2018-04-23 11:37:53
【问题描述】:
我需要从源服务器中提取文件。这个文件通常在 500mb+ 左右,并且没有具体的生成时间。
我的拉取脚本每 5 分钟运行一次,但是我想在拉取文件之前确保文件 100% 完全位于源服务器中。无论如何要知道文件是部分传输还是完全传输?
【问题讨论】:
我需要从源服务器中提取文件。这个文件通常在 500mb+ 左右,并且没有具体的生成时间。
我的拉取脚本每 5 分钟运行一次,但是我想在拉取文件之前确保文件 100% 完全位于源服务器中。无论如何要知道文件是部分传输还是完全传输?
【问题讨论】:
有多种方法可以做到这一点。一个可靠的方法是正在写入此文件的源系统,或者在复制完成后创建一个标记文件,您可以检查标记文件是否存在以确保复制完整。还有其他方法,例如在复制完成后重命名文件以指示复制完成。
如果更改源系统超出您的控制范围,您可以使用“lsof”命令。 Linux lsof 命令列出有关由系统上运行的进程打开的文件的信息。 (lsof 命令本身代表“打开文件列表”。)
lsof <filename> | wc -l
如果计数为 0,则没有进程使用此文件,这表明文件复制操作已完成。但是,只有当您确定在使用 lsof 检查其状态时没有其他进程打开/使用此文件时,这才有效 希望这会有所帮助
【讨论】: