У меня следующая ситуация: у меня несколько клиентских машин (то есть client1, client2, client3), и я хотел бы синхронизировать определенную папку ("/code") на всех машинах. В настоящее время у меня есть скрипт rsync, настроенный на отдельном сервере для синхронизации файлов. Т.е. на сервере я делаю что-то вроде следующего:

# Step 1: update/copy all files from each client to the server
rsync -vrtu client1:/code/ /code
rsync -vrtu client2:/code/ /code
rsync -vrtu client3:/code/ /code

# Step 2: synchronize each client with the server
rsync -vrtu /code/ client1:/code
rsync -vrtu /code/ client2:/code
rsync -vrtu /code/ client3:/code

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

1 ответ1

1

добавление --delete к rsync удалит файлы, которые находятся на принимающей стороне. Так что на шаге 2 нечего будет синхронизировать. Все новые файлы на клиентах уже пропали. Rsync --delete будет предназначаться только для каталога, в котором выполняется rsynced.

Вы можете использовать несколько каталогов. Т.е. использовать выделенный каталог для новых файлов на клиентах.

Вы также должны рассмотреть систему контроля версий, такую как git, для такого рода синхронизации кода. Таким образом, вы получите более чистые слияния, если файл на клиенте будет изменен. Вы можете откатиться назад, использовать несколько разных веток, посмотреть, кто что изменил и многое другое.

В git вы используете для этого ловушку post-receive и извлекаете текущую ветку в ваш рабочий каталог.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .