rsync - обновить список синхронизации во время работы rsync

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

Я прошел часть пути, используя rsync --remove-source files user @ remote: ~ / datadir / * ./localdir.Однако это не запускает rsync "вживую", т.е. если новые файлы добавляются в datadir , мне нужно повторно запустить rsync .

Насколько я понимаю, rsync сначала создает список файлов для копирования, а затем просматривает список один за другим. Мне интересно, есть ли способ обновить список по мере добавления новых файлов в datadir или какой-либо другой способ переместить файлы с удаленной машины на локальную сразу после их создания?

0
12.05.2017, 02:16
1 ответ

Ну, это все равно что прийти к врачу и сказать: "Док! Мне больно, когда я это делаю!" и он говорит: «Так не делай этого! Проблема решена!».

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

Насколько я понимаю, вы не можете изменить код, генерирующий файлы в другой системе, поскольку, если бы вы могли, вы бы просто запустили ftp или rcp или curl или что-то подобное, как только файлы будут готовы, чтобы передать их на целевую машину с исходной машины, а затем удалить их.

Таким образом, работая только с целевой машины, вам лучше просто запустить периодическое задание, чтобы войти на удаленную машину, скопировать и удалить все в ~/datadir. Это сэкономит rsync накладные расходы на сравнение двух каталогов: это напрасная трата усилий, поскольку вам все равно на содержимое ./localdir — он всегда будет получать содержимое ~/datadir. Использование rcp или scp является самым простым, но если единственный доступ к удаленной системе у вас есть rsync, запустите его в cron работа.

Это приведет к задержке между созданием файла и транспортировкой в ​​несколько минут в зависимости от периодичности вашего задания, поскольку, как вы заметили, rsync не работает в реальном времени.Если вам нужен немедленный транспорт, вам придется запустить файлообменный сервер, такой как amule, на другой машине, но это очень сложно и накладно, чтобы сэкономить несколько минут, и вам все равно придется войти в систему. время от времени удалять файлы: то, что никакая утилита для обмена файлами не сделает за вас.

Во всем этом скрывается гремлин Откуда вы знаете, что на другом конце вас ждут полные и неповрежденные файлы?

Если вы просто берете что-то из каталога, в котором создаются файлы, то любое количество вещей может привести к тому, что вы перенесете часть полного файла на целевую машину. Вы можете, например, запустить копию (или rsync или что-то еще), пока файл записывается кодом на исходной машине. Или создающая программа может просто упасть из-за какой-то аппаратной проблемы, такой как полный диск, на полпути к созданию.

Таким образом, когда я делаю подобные вещи, у меня всегда есть отдельные каталоги создания и транспортировки, а затем файлы mv (не cp) после успешного создания от создания до транспортировки. каталог. Я также очень параноидально отношусь к повреждению файлов, поэтому я всегда готовлю свой собственный файл дайджеста / контрольной суммы / манифеста для исходных файлов, а также поверх всех автоматических низкоуровневых вещей, которые защищают от повреждения.

0
28.01.2020, 04:46

Теги

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