почему не rsync копирует файлы на сервер

Я следую вместе с Railscast, который учит, как настроить софт шеф-повара. Он использует две интересные команды терминала, которые я никогда раньше не видел, только один из которых я могу приступить к работе. Когда я делаю

scp -r root@198.xxx.xxx.xxx:/var/chef . 

Он копирует содержимое каталога удаленного сервера на мой локальный компьютер. Следующая команда должна синхронизировать файлы с сервером после того, как я их сменил на своей машине

 rsync -r . root@198.XXX.XXX.XXX:/var/chef 

Однако изменения не отображаются на удаленном сервере, и когда я запускаю команды шеф-повара, которые должны применять изменения, он не показывает никаких изменений, которые необходимо внести.

Я неправильно использую rsync?

Обновить

Запуск этой команды дал следующий результат. На удаленном сервере все изменения не отображаются

 rsync -rvv . root@198.XXX.XXX.XXX:/var/chef `building file list ... done delta-transmission enabled chef/node.json chef/solo.rb chef/cache/chef-client-running.pid chef/cache/chef-stacktrace.out chef/chef/node.json chef/chef/solo.rb chef/chef/cache/chef-client-running.pid chef/chef/cache/chef-stacktrace.out chef/chef/cookbooks/main/recipes/default.rb chef/cookbooks/main/recipes/default.rb chef/cookbooks/main/templates/default/zshrc.erb total: matches=17 hash_hits=17 false_alarms=0 data=0 sent 1167 bytes received 442 bytes 643.60 bytes/sec total size is 6236 speedup is 3.88` по rsync -rvv . root@198.XXX.XXX.XXX:/var/chef `building file list ... done delta-transmission enabled chef/node.json chef/solo.rb chef/cache/chef-client-running.pid chef/cache/chef-stacktrace.out chef/chef/node.json chef/chef/solo.rb chef/chef/cache/chef-client-running.pid chef/chef/cache/chef-stacktrace.out chef/chef/cookbooks/main/recipes/default.rb chef/cookbooks/main/recipes/default.rb chef/cookbooks/main/templates/default/zshrc.erb total: matches=17 hash_hits=17 false_alarms=0 data=0 sent 1167 bytes received 442 bytes 643.60 bytes/sec total size is 6236 speedup is 3.88` 

Обновить

Вы можете заметить из вышеприведенного обновления, что каталог templates должен находиться внутри main каталога (вместе с каталогом recipes ), однако это то, что показывается

 root@Chef3:/var/chef/cookbooks# cd main root@Chef3:/var/chef/cookbooks/main# ls recipes 

One Solution collect form web for “почему не rsync копирует файлы на сервер”

У вас есть две иерархии файлов: /var/chef и /var/chef/chef . Похоже, вы редактируете одну, а затем читаете другую.

scp -r root@198.xxx.xxx.xxx:/var/chef . создает каталог chef внутри текущего каталога. Если вы запустили это из /var/chef .


Предлагаемые команды ужасны. Забудьте все, что вы читаете в этом учебнике.

scp -r не сохраняет права доступа к файлам или время. Используйте scp -rp для их сохранения.

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

Когда вы пишете rsync -a /path/to/source /path/to/destination , создается подкаталог под названием source под destination . Если вы хотите синхронизировать /path/to/source с помощью /path/to/destination , добавьте окончательный / в конец адресата: rsync -a /path/to/source /path/to/destination/ копии /path/to/source/somefile в /path/to/destination/somefile .

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

Вы можете сказать rsync передать только файлы, которые являются более новыми на стороне источника, добавив параметр -u ( rsync -au SOURCE DESTINATION ). Это ограничивает риски, если файлы также были отредактированы на стороне назначения: вы не будете удалять более новую версию, которая находится на стороне назначения, с более старой копией на стороне источника. Однако вы не можете надежно обнаружить конфликты: если файл был отредактирован с обеих сторон, то какая версия имеет самое последнее время модификации.

Rsync – это инструмент для синхронизации данных в одном направлении. Не используйте его для синхронизации в обоих направлениях. Вместо этого используйте Unison . Unison ведет список версий файлов каждый раз, когда вы его запускаете, и будет громко жаловаться, если есть конфликт (тот же файл редактируется независимо с обеих сторон). Пока нет конфликта (т. Е. Пока каждый файл изменяется только с одной стороны между синхронизациями), Unison объединит изменения с двух сторон.

Чтобы настроить Unison, используйте GUI или создайте файл настроек с именем ~/.unison/chef.prf содержащий

 root = /var/chef root = server.example.com:/var/chef times = true 

Запустите unison -auto chef чтобы синхронизировать два дерева.

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

  • rsync и смотреть частично переданный видеофайл
  • Использование rsync для копирования с локального на удаленный сервер с помощью cronjob с запросом пароля
  • Что произойдет, если я переведу жесткие диски, используемые Rsync на другой компьютер, и синхронизирую их с ним?
  • Повторное использование сеанса ssh для повторяющихся команд rsync
  • Невозможно получить параметры rsync
  • Безопасность сервера rnync / daemon
  • Как включить rsync в libcurl?
  • rsync синхронизирует источник источника с пунктом назначения (архивирование избыточных файлов по назначению)
  • Каков эффект rsync -block-size на больших файлах?
  • rsync и права на запись в целевой
  • Самый быстрый способ дублирования файлов с одного USB-накопителя на несколько других?
  • Interesting Posts
    Linux и Unix - лучшая ОС в мире.