완료되지 않은 소스 파일을 제거하지 못하도록 rsync 유지


169

속도와 질량의 두 기계가 있습니다. speed는 빠른 인터넷 연결을 가지고 있으며 크롤러를 실행하여 많은 파일을 디스크에 다운로드합니다. 질량에는 디스크 공간이 많이 있습니다. 다운로드가 끝나면 파일을 속도에서 대량으로 옮기고 싶습니다. 이상적으로는 방금 실행합니다.

$ rsync --remove-source-files speed:/var/crawldir .

하지만 rsync가 아직 다운로드를 완료하지 않은 소스 파일의 링크를 해제 할까 걱정합니다. (나는 소스 코드를 보았는데 이것을 막는 것을 보지 못했다.) 어떤 제안?

답변:


10

문제가 파일을 삭제하기 전에가 아니라 완료되기 전에 파일을 전송 하는 것 같습니다 .

이것이 Linux 인 경우 프로세스 A에서 파일을 열 수 있고 프로세스 B가 파일을 링크 해제 할 수 있습니다. 오류는 없지만 물론 A는 시간을 낭비하고 있습니다. 따라서 rsync가 소스 파일을 삭제한다는 사실은 문제가되지 않습니다.

문제는 rsync가 소스 파일을 복사 한 후에 만 ​​삭제하고 여전히 디스크에 기록되는 경우 부분 파일을 갖게됩니다.

이건 어때 : 마운트 mass에서 원격 파일 시스템 (NFS가 작동합니다) speed. 그런 다음 파일을 직접 웹 크롤링하십시오.


9

다운로드 프로세스를 얼마나 제어 할 수 있습니까? 직접 롤백하는 경우 다운로드중인 파일을 임시 디렉토리로 이동하거나 다운로드가 완료 될 때까지 임시 이름을 지정한 다음 완료되면 올바른 이름으로 mv를 설정할 수 있습니다. 타사 소프트웨어를 사용하는 경우 많은 제어 권한이 없지만 임시 디렉토리 작업을 수행 할 수 있습니다.


3

Rsync는 특정 패턴과 일치하는 파일을 제외 할 수 있습니다. 파일을 임시 디렉토리로 다운로드하도록 수정할 수없는 경우에도 다운로드 중에 파일 이름을 다르게 지정하는 규칙이있을 수 있으며 (예 : foo.downloading이라는 파일을 다운로드하는 동안 foo)이 특성을 사용하여 파일을 제외 할 수 있습니다. 여전히 복사에서 다운로드되고 있습니다.


3

크롤링 프로세스를 제어하거나 예측 가능한 출력이있는 경우, 위의 솔루션 (완료 될 때까지 임시 파일에 저장 한 다음 완료된 다운로드 위치로 mv'ing 또는 '.downloading'종류의 이름을 가진 파일 무시) 작동 할 수 있습니다. 그 모든 것이 통제 할 수없는 경우 'lsof $ filename'을 수행하고 결과가 있는지 확인하여 프로세스가 파일을 열지 않도록 할 수 있습니다. 아무도 파일을 열지 않은 경우 파일을 옮기는 것이 안전합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.