53

Сценарий: IDE устанавливается на рабочем столе Linux, редактируя файлы PHP локально. Каждый раз, когда я сохраняю файл, я хочу, чтобы это изменение появилось на сервере Linux, где работает Apache. На сервере есть ssh (и samba и nfs).

В качестве справки, когда я редактировал файлы в Windows, я наконец-то нашел WinSCP как именно тот инструмент, который мне нужен - в WinSCP есть только эта функция с начальной синхронизацией, а затем постоянным обновлением с использованием службы наблюдения за файловой системой: «Держите удаленный каталог до Дата".

В Linux можно утверждать, что sshfs можно использовать, чтобы полностью обойти необходимость синхронизации. На Windows, общий ресурс Samba будет делать то же самое. Тем не менее, я хочу, чтобы среда IDE работала с локальными файлами (на диске SSD!) Без необходимости проходить через сеть для выполнения индексации PHP и чего-то такого, что занимает много времени.

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

Любые идеи или указатели?

6 ответов6

52

Вы также можете использовать inotifywait из пакета inotify-tools.

inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
    echo need to rsync $MODFILE ...
done
29

Lsyncd будет хорошим решением для этого.

Lsyncd отслеживает интерфейс монитора событий деревьев локальных каталогов (inotify или fsevents). Он объединяет и объединяет события в течение нескольких секунд, а затем запускает один (или более) процесс (ы) для синхронизации изменений. По умолчанию это rsync. Таким образом, Lsyncd - это легкое решение для живого зеркала, которое сравнительно легко установить, не требующее новых файловых систем или блочных устройств, и не снижающее производительность локальной файловой системы.

В итоге, он использует те же инструменты для выполнения работы (inotify и rsync), как предложено в других ответах, но его проще настроить для тех, кто не знаком со сценариями оболочки.

22

Мне это очень нужно, так как мой код должен работать на удаленных компьютерах, а я пишу код на локальной машине. Я нашел хороший инструмент, который вы можете использовать для постоянного мониторинга ваших локальных папок и синхронизации их с удаленной или локальной папкой: https://github.com/axkibe/lsyncd

Простая команда для непрерывной синхронизации локального каталога с удаленным компьютером через ssh будет:

lsyncd -log all -nodaemon -rsyncssh <local_path> <user>@<ip> <remote_path>

Как и с любой другой командой rsync, убедитесь, что вы правильно указали путь к папке и проверили ее перед запуском. Я чуть не убил одну из моих удаленных машин, потому что не смог указать правильный каталог назначения. Убедитесь, что вы не пропустите удаленный путь и не используйте «/», если вы не знаете, что делаете.

2

Если вам нужно наблюдать за файловой системой, то inotify - способ сделать это. Я написал бы простой скрипт на python, использующий pyinotify для выполнения синхронизации при изменении файловой системы. Смотрите документацию. Вы также можете проверить autosync.py для вдохновения. Повеселись.

0

То, что я однажды сделал, это bash-скрипт, запускающий ls -l в цикле (с небольшим сном) и сравнивающий с предыдущим выводом. Если это изменилось, сделайте свою синхронизацию.

#!/bin/bash

listcommand="ls -l $*"

newfilelist=$( $listcommand )
while true
do
   if [[ $oldfilelist != $newfilelist ]]
   then
      oldfilelist=$newfilelist
      # run your synchronization tool
   fi
   sleep 10 || exit 2 
   newfilelist=$( $listcommand )
done

Запустите этот скрипт в новом терминале с именами файлов в качестве аргументов (после добавления в ваш инструмент синхронизации).

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

-1

Гораздо более простой подход:

Экспортируйте ваш /var /www с помощью samba (или nfs) и работайте с файлами прямо на сервере.

Другое решение: большинство IDE допускают различные конфигурации развертывания - проверьте, подходит ли вам такая.

Или установите систему управления исходным кодом, такую как Git, Bazaar и т.д.

Удачи !!

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