كيف يمكنني استئناف التنزيلات في بيرل؟

StackOverflow https://stackoverflow.com/questions/2486967

  •  21-09-2019
  •  | 
  •  

سؤال

لديّ مشروع يعتمد على بعض الثنائيات الأخرى التي سيتم تنزيلها من الويب في وقت التثبيت. لهذا ما أقوم به هو:

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

المشكلة في هذا النهج هي أنه عندما أقاطع تنزيلًا في الوسط ، وأستدعى البرنامج النصي في المرة القادمة ، يتم تخطي الملف الذي تم تنزيله جزئيًا أيضًا (وهو غير مرغوب فيه) ، وأريد أيضًا أن يستأنف WGET تنزيل الملف الذي تم تنزيله جزئيًا .

كيف يجب أن أقوم بذلك: الحلول الممكنة التي يمكن أن أفكر فيها:

  1. دع الملف ليتم تنزيله على بعض الملف say download_tmp. انتقل إلى الملف الأصلي إذا نجحت.
  2. التعامل مع sig {'int'} لكتابة رمز التنظيف المناسب.

ولكن لا يمكن لأي من هذه المساعدة أن تساعد في استئناف تنزيل الملف الجزئي ،

أي رؤى؟

هل كانت مفيدة؟

المحلول

FIST ، لا أفهم ما علاقة هذا بـ Perl ، نظرًا لأنك تستخدم WGET للقيام بتحميل ... يمكنك استخدام libww-perl (Perldoc LWP) ولديك المزيد من التحكم في عملية التنزيل.

ثم أؤكد أن فكرتك في التنزيل على اسم ملف "TMP" ونقل الملف عند النجاح.

ومع ذلك ، أعتقد أنك بحاجة إلى الذهاب إلى أبعد من ذلك والتحقق من سلامة الملفات. من السهل جدًا القيام بجهاز MD5 أو Sha Hash ، ويتطابق مع ما تم تنزيله مع ما تتوقعه. يمكنك الحصول على ملف قصير على الخادم يحتوي على checksum (filename.md5). حدد النجاح فقط عندما يكون لديك مباراة.

لاحظ أن اصطياد جميع الإشارات ومحاولة جعل العملية غير قابلة للوقوف عمومًا ، ومن ثم ، فإن توقع أن تنجح في الفشل في وقت أو آخر. يمكن أن يكون هناك مهلة شبكة ، أو تعطل ، وفشل الطاقة ، ومشكلة التكوين على الخادم ... يجب أن تفترض بدلاً من ذلك أن التنزيلات يمكن أن تفشل ، لأنها ستحصل على الرمز حتى تتمكن عمليتك من استردادها.

أخيرًا ، أنت لا تخبرنا بنوع الثنائيات التي تقوم بتنزيلها وما تفعله معهم. بما أنك تستخدم WGET ، فسوف أفترض أنك في UNIX ؛ يجب أن تفكر في استخدام RPM+YUM أو الإعجابات ، فهي تتعامل مع كل هذا من أجلك. RPM سهلة الكتابة ، حقا.

نصائح أخرى

استخدم نهجك الأول ..

  1. تنزيل إلى "اسم الملف" .TMP
  2. نقل "اسم الملف" .TMP إلى "اسم الملف"
    يتحرك! لا نسخ
  3. مرة واحدة لكل diem تنظيف جميع ملفات .TMP (جنون العظمة)

يمكنك فقط استخدام WGET's -N و -c الخيارات وإزالة المنطق "إذا كان الملف موجودًا".

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top