Назад | Перейти на главную страницу

Как я могу автоматически синхронизировать файлы на моей виртуальной машине CentOS?

Мне приходится постоянно копировать файлы из моего каталога ~ / src в / home / httpd, что является проблемой, когда я вношу изменения в интерфейс. Могу ли я автоматически изменить синхронизацию файлов? - и конкретно только пока я разрабатываю - то, что я могу включать и выключать.

Я не совсем уверен, какова ваша цель, но несколько предложений, которые могут быть полезны:

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

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

По запросу (не мгновенно):

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

Сценарий оболочки: Одно из простых решений - использовать rsync. Он определит, какие изменения находятся в вашем каталоге ~ / src относительно вашего каталога / home / httpd, и внесет изменения, необходимые для синхронизации вашего / home / httpd с вашим исходным каталогом.

Контроль версий: Наиболее эффективное решение, хотя и значительно более сложное, чем rsync, - это контроль версий - например, Subversion. В принципе:

  • Создайте репозиторий на своем сервере
  • Импортируйте файлы в репозиторий
  • Загрузите рабочую копию в / home / httpd
  • Установите хук после фиксации, который обновит / home / httpd
  • Загрузите рабочую копию в ~ / src
  • Внесите свои изменения и зафиксируйте их в репозитории (svn commit) - хук автоматически обновит / home / httpd

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

Хотя это и не происходит автоматически, после внесения изменений используйте rsync:

$ rsync -r --delete /home/username/src/ /home/httpd

Вы даже можете создать псевдоним:

$ alias sync='rsync -r --delete /home/username/src/ /home/httpd'

Как я всем подчеркиваю, прежде чем использовать это, вы должны проверить man rsync для дополнительных опций.

Кроме того, я настоятельно рекомендую использовать контроль версий (svn или мерзавец возможно) по множеству причин.


Редактировать:

Лично я бы использовал bash цикл --- в частности while петля с sleep. Введите в оболочку следующее:

while true; do 
    sleep 300 # Every 5 minutes
    rsync -r --delete /home/username/src/ /home/httpd
done &

Это сделает его фоновой работой, которую вы можете убить в любой момент. Просто введите jobs чтобы увидеть индекс задания и, если он вам больше не нужен, введите kill %(index).

В качестве альтернативы можно добавить команду как cron job, например, каждые 10 минут добавляйте в crontab следующее:

*/10 * * * * rsync -r --delete /home/username/src/ /home/httpd

Чтобы отредактировать ваш crontab:

$ crontab -e

смотреть на lsyncd. Он использует inotify для получения информации об изменениях в файлах и их синхронизации через rsync.