помешайте rsync удалять незаконченные исходные файлы

У меня есть две машины, скорость и масса. скорость имеет быстрое соединение и запускает поисковый робот, который загружает много файлов к диску. масса имеет большое дисковое пространство. Я хочу переместить файлы от скорости до массы после того, как они будут сделаны, загружая. Идеально, я только что работал:

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

но я волнуюсь, что rsync удалит связь с исходным файлом, который не закончил загружать все же. (Я посмотрел на исходный код, и я не видел, что что-либо защитило от этого.) Какие-либо предложения?

170
задан L. F. 9 July 2019 в 06:57
поделиться

4 ответа

Это кажется мне, проблема передача файл, прежде чем это будет завершено, не, что Вы удаляете его.

, Если это - Linux, для файла возможно быть открытым процессом A и обработать B, может расцепить файл. Нет никакой ошибки, но конечно A тратит впустую свое время. Поэтому то, что rsync удаляет исходный файл, не является проблемой.

проблемой является rsync, удаляет исходный файл только после того, как это копируется, и если это будет все еще записано в диск, то у Вас будет частичный файл.

Как насчет этого: Смонтируйтесь mass как удаленная файловая система (NFS работал бы) в speed. Тогда просто веб-проверка файлы непосредственно.

10
ответ дан Jason Cohen 23 November 2019 в 20:48
поделиться

Rsync может исключить файлы, соответствующие определенным скороговоркам. Даже если Вы не можете изменить его, чтобы заставить его загрузить файлы на временный каталог, возможно, это имеет соглашение именования файлов по-другому во время загрузки (например: foo.downloading при загрузке для файла, названного foo) и можно использовать это свойство для исключения файлов, которые все еще загружаются с того, чтобы быть скопированным.

3
ответ дан Grey Panther 23 November 2019 в 20:48
поделиться

Сколько контроля Вы имеете над процессом загрузки? Если Вы самокрутка, Вы можете иметь файл, загружаемый движение на временный каталог, или иметь временное имя, пока это не закончило загружать, и затем mv это к корректному имени, когда это сделано. Если Вы используете внешнее программное обеспечение, то Вы не имеете столько же контроля, но Вы все еще могли бы быть в состоянии сделать временную вещь каталога.

9
ответ дан Paul Tomblin 23 November 2019 в 20:48
поделиться

Если Вы управляете процессом проверки, или он имеет предсказуемый вывод, вышеупомянутые решения (хранящий в tempfile, пока не закончено, то mv'ing к месту завершенных загрузок, или игнорирующий файлы с '.downloading' вид имени) могли бы работать. Если все это находится вне Вашего контроля, можно удостовериться, что файл не открыт никаким процессом путем выполнения 'lsof $filename' и проверки, существует ли результат. Очевидно, если ни у кого нет открытого файла, безопасно переместить его.

3
ответ дан pjz 23 November 2019 в 20:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: