Скрипт для автоматической синхронизации при изменении каталога / файла между компьютером Mac OSX и компьютером Linux - PullRequest
0 голосов
/ 24 апреля 2011

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

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

Я знаю, что inotifywait существует на машинах Linux и может решить эту проблему.Я также читал об API FSEvents и kqueue.Тем не менее, ни один из них, кажется, не доступен из командной строки, и я действительно не хочу тратить много времени на то, чтобы сделать что-то для этого ...

Я думаю, я мог бы использовать cronjob, но минутадовольно долго ждать, чтобы увидеть изменения на сайте ...

Есть идеи?

Ответы [ 3 ]

1 голос
/ 24 апреля 2011

Я делаю это все время, разрабатывая на рабочей станции Windows / Linux / Mac и сохраняя изменения на удаленном сервере Linux, где они немедленно возвращаются в браузер моей рабочей станции для тестирования. У вас есть пара вариантов:

  1. Вы можете монтировать удаленные файлы локально (например, через sshfs) и вносить изменения непосредственно в них. То есть, ваш Mac считает, что файлы локальные, поэтому вы можете редактировать их с помощью графического редактора, но когда вы выбираете Файл-> Сохранить, он фактически сохраняет файл удаленно. Основным недостатком этого является то, что вы не можете работать при отключении от сервера.

  2. Удаленное монтирование локальных файлов. Это позволит вам работать локально, пока он отключен, но не позволит тестовому сайту работать, когда он отключен, что может не иметь большого значения. Эта опция может быть невозможна, если у вас нет необходимых инструментов / доступа на удаленном сервере.

  3. (Мои предпочтения.) Используйте IDE NetBeans, который имеет очень приятную функцию «копировать на удаленный». Вы поддерживаете полную копию всех файлов локально и редактируете их напрямую. Когда вы нажимаете Файл-> Сохранить в файле, NetBeans сохраняет его локально и прозрачно scp / ftp на удаленный сервер.

0 голосов
/ 24 апреля 2011

Возможно, вы сможете настроить агент launchd, чтобы сделать то, что вы хотите для простой установки.См. этот вопрос и справочную страницу для launchd.plist для получения дополнительной информации о ключе launchd WatchPath.Но похоже, что WatchPath может не работать для изменений в подкаталогах .

0 голосов
/ 24 апреля 2011

Как насчет использования DVCS типа git или mercurial и наличия локального репо для запуска перехватов после фиксации для запуска rsync, а затем для самого теста?

Я немного озадачен, почему вы не можете просто запустить rsync из того же скрипта, который запускает тест.Если вы запускаете rsync -e ssh, вы можете настроить автоматическую аутентификацию с открытым ключом между виртуальной машиной и Mac.В этом случае не будет никакого руководства по rsync.

...