2008-09-07 23 views
168

Tôi có hai máy, tốc độ và khối lượng. tốc độ có kết nối Internet nhanh và đang chạy trình thu thập dữ liệu tải xuống rất nhiều tệp vào đĩa. khối lượng có rất nhiều không gian đĩa. Tôi muốn di chuyển các tập tin từ tốc độ đến khối lượng sau khi chúng được tải xuống xong. Lý tưởng nhất, tôi chỉ cần chạy:giữ rsync xóa các tệp nguồn chưa hoàn thành

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

nhưng tôi lo ngại rằng rsync sẽ hủy liên kết tệp nguồn chưa hoàn tất tải xuống. (Tôi nhìn vào mã nguồn và tôi không thấy bất cứ điều gì bảo vệ chống lại điều này.) Bất kỳ đề nghị?

Trả lời

8

Bạn kiểm soát được bao nhiêu trong quá trình tải xuống? Nếu bạn cuộn của riêng bạn, bạn có thể có các tập tin được tải về đi đến một thư mục tạm thời hoặc có một tên tạm thời cho đến khi nó hoàn thành tải về, và sau đó mv nó vào tên chính xác khi nó được thực hiện. Nếu bạn đang sử dụng phần mềm của bên thứ ba, thì bạn không có nhiều quyền kiểm soát, nhưng bạn vẫn có thể thực hiện điều thư mục tạm thời.

10

Dường như với tôi sự cố là chuyển một tệp trước khi tệp hoàn tất, chứ không phải là bạn đang xóa nó.

Nếu đây là Linux, có thể tệp được mở theo quy trình A và quy trình B có thể hủy liên kết tệp. Không có lỗi, nhưng tất nhiên A đang lãng phí thời gian của nó. Do đó, thực tế là rsync xóa tệp nguồn không phải là một vấn đề.

Vấn đề là rsync chỉ xóa tệp nguồn sau khi tệp được sao chép và nếu nó vẫn được ghi vào đĩa, bạn sẽ có một tệp một phần.

Làm thế nào về điều này: Mount mass làm hệ thống tệp từ xa (NFS sẽ hoạt động) trong speed. Sau đó, chỉ cần thu thập thông tin trên web trực tiếp các tệp.

3

Rsync có thể loại trừ các tệp phù hợp với một số patters. Ngay cả khi bạn không thể sửa đổi nó để làm cho nó tải tập tin vào một thư mục tạm thời, có thể nó có một quy ước đặt tên các tập tin khác nhau trong quá trình tải xuống (ví dụ: foo.downloading trong khi tải xuống tệp có tên foo) và bạn có thể sử dụng thuộc tính này để loại trừ các tệp vẫn đang được tải xuống để sao chép.

3

Nếu bạn có quyền kiểm soát quá trình thu thập dữ liệu hoặc có thể dự đoán được, các giải pháp trên (lưu trữ trong tempfile cho đến khi hoàn tất, sau đó chuyển đến địa điểm tải xuống hoàn tất hoặc bỏ qua tệp bằng '.downloading' loại tên) có thể hoạt động. Nếu tất cả những điều đó nằm ngoài tầm kiểm soát của bạn, bạn có thể đảm bảo rằng tệp không được mở bằng bất kỳ quá trình nào bằng cách thực hiện 'lsof $ filename' và kiểm tra xem có kết quả nào không. Rõ ràng nếu không có ai mở tập tin, thì an toàn để di chuyển nó.

Các vấn đề liên quan