2010-03-21 71 views
4

我有依赖于其他一些二进制文件的一个项目从网上下载的时间。对于这个在安装我做的是什么:如何恢复Perl下载?

if (file-present-in-src/) 
    # skip that file 
else 
    # use wget to download the file 

这种方法的问题是,当我打断下载在中间,并在下次调用脚本时,部分下载的文件也会被跳过(这是不期望的),我也想让wget继续下载部分下载的文件。

我应该如何去了解它: 可能的解决方案我能想到的:

  1. 让文件下载到一些文件说download_tmp。如果成功,移至原始文件 。
  2. 处理SIG {'INT'}来编写适当的清理代码。

但所有这些可以帮助恢复部分文件下载,

任何见解?

回答

3

拳,我不明白这是什么都有用Perl做,因为你使用wget做你下载过。 ..你可以使用libwww-perl(perldoc LWP)并对下载过程有更多的控制。

然后,我将您的想法下载到“tmp”文件名,并在成功时移动文件。

但是我认为你需要进一步验证文件的完整性。做一个MD5或SHA哈希非常简单,并将下载的内容与您所期望的内容进行匹配。您可以在包含校验和(filename.md5)的服务器上拥有一个短文件。只有当你有一场比赛时才确定成功。

请注意,捕获所有信号并且通常试图使进程不可运行,然后期望它已经运行必然会在某个点或另一个点失败。可能存在网络超时,崩溃,电源故障,服务器上的配置问题......您应该承担下载操作可能会失败的原因,因为它们会进行编码,以便您的进程能够恢复。

最后,你不告诉我们你正在下载什么样的二进制文件,以及你在做什么。既然你使用wget,我会假设你在Unix上;你应该考虑使用RPM + Yum或者类似的东西,他们会为你处理所有这些事情。 RPM很容易编写,真的。

1

使用第一种方法..

  1. 下载到 “文件名” 的.tmp
  2. 移动 “文件名” 的.tmp为 “文件名”
    招!不可复制
  3. 按日一次清理掉所有.tmp文件(偏执rulez)
+0

错误!我的意思是移动;) – sud03r 2010-03-21 12:32:09

1

您可以使用wget的-N-c选项并删除整个“if file exists”逻辑。