2010-03-21 5 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

당신이 dowloading을 할 wget과를 사용하고 있기 때문에 주먹, 나는이 펄과 관련이있다 무엇을 이해하지 않습니다. libwww-perl (perldoc LWP)을 사용하여 다운로드 프로세스에 대한 더 많은 제어권을 가질 수 있습니다.

그럼 "tmp"파일 이름으로 다운로드하고 성공하면 파일을 옮기는 아이디어를 생각해보십시오.

하지만 필자는 앞으로 나아가서 파일의 무결성을 확인해야한다고 생각합니다. MD5 또는 SHA 해시를 수행하는 것은 매우 쉽고 다운로드 한 것과 당신이 기대하는 것과 일치시킵니다. 체크섬 (filename.md5)을 포함하는 서버에 짧은 파일을 가질 수 있습니다. 성냥이있을 때만 성공을 결정하십시오.

모든 신호를 포착하고 일반적으로 프로세스를 제대로 작동시키지 못하도록 시도한 다음 작동을 예상하면 어느 시점에서 실패 할 수밖에 없습니다. 서버에 네트워크 시간 제한, 충돌, 정전, 구성 문제가있을 수 있습니다. 대신 다운로드가 실패 할 수 있다고 가정해야하며, 프로세스가 복구 될 수 있도록 코딩해야합니다.

마지막으로 어떤 종류의 바이너리를 다운로드하고 있고 무엇을하고 있는지 알려주지 않습니다. 당신이 wget을 사용하기 때문에 나는 유닉스에 있다고 가정 할 것이다. 당신은 RPM + Yum 등을 사용하는 것을 고려해야한다. RPM은 쓰기 쉽습니다.

1

첫 번째 방법을 사용 ..

  1. 다운로드 "파일 이름"에 .TMP
  2. 이동 "파일 이름".TMP에 "파일 이름"
    이동! 모든 .tmp 파일 (편집증의 rulez)를 청소 일당 번
  3. 을 복사하지
+0

오류! 나는 움직임을 의미했다.) – sud03r

1

wget의 -N-c 옵션을 사용하고 "if file exists"논리 전체를 제거하면됩니다.

관련 문제