- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想知道是否有检查上传到您的 ftp 服务器是否成功的最佳实践。
我正在使用的系统有一个上传目录,其中包含上传文件的每个用户的子目录。
这些目录中的文件只是临时的,一旦处理它们就会被丢弃。
系统循环遍历每个子目录和其中的新文件,并为每个文件检查它是否被修改 10 秒。如果 10 秒内没有修改,系统认为文件上传成功。
我不喜欢系统当前处理这些情况的方式,因为它会尝试处理文件并在文件上传不完整时失败,而不是等待并允许用户继续上传直到上传完成。对于不需要很多时间上传的小文件来说可能没问题,但如果文件很大,我希望能够恢复上传。
我也不喜欢目录和文件的循环,系统在高 cpu 使用率下闲置,所以我实现了 pyinotify写入文件时触发操作。我还没有真正看过源代码,我只能假设它比当前的实现更优化(比我描述的要多)。
不过我还需要检查文件是否上传成功。
我知道我可以解析 xferlog 以获得所有完整的上传。喜欢:
awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog
这将使 pyinotify不必要,因为如果我只跟踪日志,我可以获得完整和不完整上传的路径。
所以我的解决方案是在我的运行循环中检查 xferlog 并且只处理完整的文件。
除非有最佳实践或更好的方法来做到这一点?
这种方法有什么缺点?
我在 debian 服务器上运行我的应用程序,proftpd 安装在同一台服务器上。此外,我无法控制发送文件的客户端。
最佳答案
查看 proftpd 文档,我看到 http://www.proftpd.org/docs/directives/linked/config_ref_HiddenStores.html
The HiddenStores directive enables two-step file uploads: files are uploaded as ".in.filename." and once the upload is complete, renamed to just "filename". This provides a degree of atomicity and helps prevent 1) incomplete uploads and 2) files being used while they're still in the progress of being uploaded.
当您控制 proftpd 时,这应该是解决问题的“更好方法”,因为它会为您处理所有工作 - 您可以假设任何不以 .in.
开头的文件> 是一个完整的上传。您还可以在某个地方的整理脚本中任意一段时间不活动后安全地删除任何孤立的 .in.*
文件。
关于python - Proftpd 验证上传完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7644533/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!