4

我有一个项目,它依赖于在安装时从网上下载的其他一些二进制文件。为此,我要做的是:

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

这种方法的问题是,当我在中间中断下载并下次调用脚本时,部分下载的文件也被跳过(这是不希望的),我也希望 wget 恢复部分下载的文件的下载.

我应该怎么做:我能想到的可能的解决方案:

  1. 让要下载的文件到某个文件,比如 download_tmp。如果成功则移动到原始文件。
  2. 处理 SIG{'INT'} 以编写正确的清理代码。

但这些都不能帮助恢复部分文件下载,

有什么见解吗?

4

3 回答 3

3

拳头,我不明白这与 Perl 有什么关系,因为您正在使用 wget 进行下载……您可以使用 libwww-perl (perldoc LWP) 并对下载过程进行更多控制。

然后我支持您下载到“tmp”文件名并成功移动文件的想法。

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

请注意,捕获所有信号并通常试图使进程无法杀死,然后期望它已经工作肯定会在某一时刻失败。可能存在网络超时、崩溃、电源故障、服务器上的配置问题……您应该假设下载可能会失败,因为它们会失败,并编写代码以便您的进程可以恢复。

最后,您并没有告诉我们您正在下载什么样的二进制文件以及您正在使用它们做什么。由于您使用 wget 我将假设您在 Unix 上;你应该考虑使用 RPM+Yum 之类的,它们会为你处理所有这些。RPM 很容易编写,真的。

于 2010-03-21T13:13:53.720 回答
1

使用你的第一种方法..

  1. 下载到“文件名”.tmp
  2. 将“文件名”.tmp 移动到“文件名”
    移动!不复制
  3. 每日一次清除所有 .tmp 文件 (paranoia rulez)
于 2010-03-21T12:05:20.750 回答
1

您可以只使用 wget-N-c选项并删除整个“如果文件存在”逻辑。

于 2010-03-21T13:34:29.077 回答