Краткая история: нам нужен надежный и надежный процесс перемещения файлов. У нас есть исходные каталоги, в которые часто записываются файлы, из которых нам нужно переместить файлы. Файлы идут парами - большой двоичный файл и небольшой индекс XML. Мы получаем файл CTL, который определяет эти комплекты файлов. Существует процесс, который работает с файлами, когда они попадают в целевой каталог; это избавит от них, когда это будет сделано. Будет ли rsync работать лучше, или нам нужно сделать более сложным? Длинная история такая:
У нас есть несколько источников, из которых можно извлечь: один набор каталогов находится на машине Windows (на которой есть Cygwin и демон SSH), и целая куча каталогов находится на наборе серверов SFTP (большинство из них также Windows). Наши пункты назначения - это список каталогов на серверах AIX.
Мы использовали очень надежный Perl-скрипт на машине Windows / Cygwin, когда он был нашим единственным источником. Однако мы работаем над тем, чтобы избавиться от этой машины, и сейчас есть другие источники, серверы SFTP, на которых мы не можем в настоящее время запускать наши собственные скрипты.
По соображениям безопасности мы не можем запускать задания копирования на наших серверах AIX - у них нет доступа к исходным серверам. В настоящее время у нас есть собственная программа Java на машине Linux, которая использует SFTP для извлечения из различных новых исходных каталогов SFTP, копирует в локальный каталог tmp, проверяет, что все присутствует, затем копирует это на машины AIX, а затем удаляет файлы из источника. Тем не менее, мы находим множество ошибок или плохо обрабатываемую проверку ошибок. Никто из нас не является экспертом по Java, поэтому исправить / улучшить это может быть сложно.
Нас беспокоят:
Если бы вам это представили, вы бы просто написали сценарий rsync? Или вы бы создали или купили инструмент, и если да, то какой бы он был (или какие технологии он использовал бы?) Я (и другие члены моей команды) неплохо разбираюсь в Perl.
Редактировать: Rsync выполняет сквозную проверку: после передачи файла вычисляет контрольную сумму этого файла в месте назначения и сравнивает ее с контрольной суммой в источнике. Только когда контрольные суммы совпадают, он объявляет передачу успешной. Это отражается в окончательном коде статуса выхода - если ВСЕ переданные файлы прошли проверку, код выхода будет 0 (Успех).
В аналогичной настройке я написал собственное решение на основе rsync. Это было для ночных резервных копий, и мы не удаляем файлы автоматически.
Чтобы решить некоторые из ваших проблем:
--remove-source-files
вариант).find
в конце передачи подсчитать количество файлов и du *
чтобы получить размеры каталогов и зарегистрировать это.В основном вам нужно позаботиться о нескольких вещах в сценарии. В основном: сбор статуса выхода, некоторой статистики и удаление исходных файлов при успешной передаче.
Вы можете доверять статусу выхода rsync, что все запрошенные файлы были переданы, но вы должны подумать о том, насколько вы доверяете своему скрипту, чтобы предоставить rsync правильные файлы (исходный каталог), прежде чем удалять их на исходной машине. Возможно, считая файлы с find
в источнике, а затем в месте назначения (и затем проверка совпадения этих чисел) будет хорошей последней проверкой, прежде чем ваш сценарий автоматически удалит файлы.
Дайте ему от 10 до 20 попыток разработать и протестировать свой сценарий. Вам нужно будет установить Cygwin с клиентами rsync и ssh на машины Windows.
Приятно быть уверенным в таком приложении, зная, как оно работает. Я никогда не использовал коммерческое программное обеспечение для резервного копирования, но если вы можете найти надежное программное обеспечение и доверять ему - тогда сделайте это - это может сэкономить вам много времени.