小编Jay*_*Lev的帖子

Proftpd验证完整上传

我想知道是否有最佳实践来检查上传到您的ftp服务器是否成功.

我正在使用的系统有一个上传目录,其中包含上传文件的每个用户的子目录.

这些目录中的文件只是临时的,一旦处理完就丢弃.

系统循环遍历每个子目录及其中的新文件,并为每个文件检查它是否被修改了10秒.如果它未被修改10秒钟,则系统假定文件已成功上载.

我不喜欢系统当前处理这些情况的方式,因为它会尝试处理文件并在文件上传不完整时失败,而不是等待并允许用户恢复上传直到完成.对于没有花费大量时间上传的小文件可能没问题,但如果文件很大,我希望能够恢复上传.

我也不喜欢目录和文件的循环,系统在高CPU使用率下闲置,所以我实现了pyinotify来在写入文件时触发动作.我还没有真正看过源代码,我只能假设它比当前的实现更优化(比我描述的更多).

但是我仍然需要检查文件是否已成功上传.

我知道我可以解析xferlog以获得所有完整的上传.喜欢:

awk '($12 ~ /^i$/ && $NF ~ /^c$/){print $9}' /var/log/proftpd/xferlog
Run Code Online (Sandbox Code Playgroud)

这会使pyinotify变得不必要,因为如果我只拖尾日志,我可以获得完整和不完整上传的路径.

所以我的解决方案是检查运行循环中的xferlog,只处理完整的文件.

除非有最佳实践或只是更好的方法来做到这一点?

这种方法的缺点是什么?

我在debian服务器上运行我的应用程序,proftpd安装在同一台服务器上.此外,我无法控制发送文件的客户端.

python ftp file-transfer proftpd

5
推荐指数
1
解决办法
2721
查看次数

Python fork 进程不会死

我见过几个这样的问题,但是在尝试了检查孩子是否还活着并退出孩子进程的各种变体之后,我简化了问题,但仍然无法解决。

使用 sys.exit(0) 退出分叉进程是否有误?有没有其他方法可以杀死它。问题是,我不能让父进程终止进程,因为它不知道它们何时完成工作。

起初我以为是因为在退出之前执行了一个系统命令(Python 运行系统命令然后退出...不会退出),但我什至在简化版本中删除了它,因为给定的解决方案也不起作用.

下面是一个例子:

import sys
import os
import time

children = []

for i in range(0,3):    
    pid = os.fork()

    if pid == -1:
        continue
    elif pid == 0:
        # Do work...
        print 'Child %d spawned' % os.getpid()
        sys.exit(0)     
    else:
        children.append(pid)

time.sleep(5)
for pid in children:
    proc_path = '/proc/%d' % pid
    if not os.path.exists(proc_path):
        print 'Child %d is dead' % pid
    else:
        print 'Child %d is alive' % pid
Run Code Online (Sandbox Code Playgroud)

这打印:

Child 27636 spawned
Child 27637 …
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
3150
查看次数

标签 统计

python ×2

file-transfer ×1

ftp ×1

proftpd ×1