我想知道是否有检查上传到您的 ftp 服务器是否成功的最佳做法。
我正在使用的系统有一个上传目录,其中包含上传文件的每个用户的子目录。
这些目录中的文件只是临时的,一旦处理它们就会被处理掉。
系统循环遍历这些子目录中的每一个和其中的新文件,并为每个文件检查它是否被修改了 10 秒。如果 10 秒内没有修改,则系统认为文件上传成功。
我不喜欢系统目前处理这些情况的方式,因为如果文件上传不完整,它会尝试处理文件并失败,而不是等待并允许用户继续上传直到完成。对于不需要很多时间上传的小文件可能很好,但如果文件很大,我希望能够恢复上传。
我也不喜欢目录和文件的循环,系统在 cpu 使用率很高时空闲,所以我实现了 pyinotify以在写入文件时触发动作。我还没有真正看过源代码,我只能假设它比当前的实现更优化(它比我描述的更多)。
但是我仍然需要检查文件是否成功上传。
我知道我可以解析 xferlog 以获取所有完整的上传。喜欢:
awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog
这将使pyinotify 变得不必要,因为如果我只跟踪日志,我可以获得完整和不完整上传的路径。
所以我的解决方案是在我的运行循环中检查 xferlog 并且只处理完整的文件。
除非有最佳实践或只是更好的方法来做到这一点?
这种方法有什么缺点?
我在 debian 服务器上运行我的应用程序,并且 proftpd 安装在同一台服务器上。此外,我无法控制发送文件的客户端。