c*****m 发帖数: 1160 | 1 我需要在服务器上监测一个ftp目录,客户上传文件之后,这里把文件拷贝(mv)到
backup目录然后解压分析处理。
我总能用列文件的方式对在这个目录出现的文件处理,但是我怎么能知道这个文件是“
正在传输中”还是“已经完成传输”?
我所能想到的方法就是用file modified time跟当前 server clock比较,如果已经超
过1分钟(或者更长时间,5分钟?)就认为完成传输。
有什么建议?谢谢。
Ubuntu 12.04服务器。 |
c*****m 发帖数: 1160 | 2 另一个想法:如果这个文件正在传输,我 mv 它,是不是会失败?那么我就 try catch
这个失败,就可以忽略它了。
这个方式如何? |
b******6 发帖数: 572 | 3 已经在 宝典 那里回答了。
看看 lsof 能不能行。
最好不要用 mv 这种方法,很危险。
catch
【在 c*****m 的大作中提到】 : 另一个想法:如果这个文件正在传输,我 mv 它,是不是会失败?那么我就 try catch : 这个失败,就可以忽略它了。 : 这个方式如何?
|
n*****t 发帖数: 22014 | 4 mv 不会失败
catch
【在 c*****m 的大作中提到】 : 另一个想法:如果这个文件正在传输,我 mv 它,是不是会失败?那么我就 try catch : 这个失败,就可以忽略它了。 : 这个方式如何?
|
h*******t 发帖数: 2679 | 5 我们的做法是传完后,客户端主动上传个小的带md5之类文件信息的文本文件.
【在 c*****m 的大作中提到】 : 我需要在服务器上监测一个ftp目录,客户上传文件之后,这里把文件拷贝(mv)到 : backup目录然后解压分析处理。 : 我总能用列文件的方式对在这个目录出现的文件处理,但是我怎么能知道这个文件是“ : 正在传输中”还是“已经完成传输”? : 我所能想到的方法就是用file modified time跟当前 server clock比较,如果已经超 : 过1分钟(或者更长时间,5分钟?)就认为完成传输。 : 有什么建议?谢谢。 : Ubuntu 12.04服务器。
|
c*****m 发帖数: 1160 | 6 啊,要是客户能多传一个"success"文件就完美了,可是我们不能这样要求客户啊。 |
a9 发帖数: 21638 | 7 你可以尝试打开这个文件,打不开就是还没传完吧?
【在 c*****m 的大作中提到】 : 啊,要是客户能多传一个"success"文件就完美了,可是我们不能这样要求客户啊。
|
n*****t 发帖数: 22014 | 8 体会一下 tail -f
【在 a9 的大作中提到】 : 你可以尝试打开这个文件,打不开就是还没传完吧?
|
a9 发帖数: 21638 | 9 我提供个思路而已,至少要用某种模式打开吧。
【在 n*****t 的大作中提到】 : 体会一下 tail -f
|
h**i 发帖数: 712 | 10 要是我来做,直接改FTP源码,不过这种暴力手段只适合嵌入式系统,lsof 是个思路,
查log也比较稳妥。
【在 c*****m 的大作中提到】 : 我需要在服务器上监测一个ftp目录,客户上传文件之后,这里把文件拷贝(mv)到 : backup目录然后解压分析处理。 : 我总能用列文件的方式对在这个目录出现的文件处理,但是我怎么能知道这个文件是“ : 正在传输中”还是“已经完成传输”? : 我所能想到的方法就是用file modified time跟当前 server clock比较,如果已经超 : 过1分钟(或者更长时间,5分钟?)就认为完成传输。 : 有什么建议?谢谢。 : Ubuntu 12.04服务器。
|
c*****m 发帖数: 1160 | 11 最后还是用验证zip file的方式来做了。因为我所拿到的都是 zip file,如果最后部
分没有上传上来的话,unzip -v 会说:
unzip -v a1.zip
Archive: a1.zip
End-of-central-directory signature not found. Either this file is not
a zipfile, or it constitutes one disk of a multi-part archive. In the
latter case the central directory and zipfile comment will be found on
the last disk(s) of this archive.
unzip: cannot find zipfile directory in one of a1.zip or
a1.zip.zip, and cannot find a1.zip.ZIP, period.
(Exit code = 9)
而用python的 zipfile.is_zipfile(filelocation) 就会得到 false.
所以我用这个就足够判断了。
谢谢大家的讨论。 |