Linux: непрерывная синхронизация файлов одним способом

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

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

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

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

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

14
задан stolsvik
10.04.2023 13:56 Количество просмотров материала 3554
Распечатать страницу

6 ответов

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

inotifywait -r -m -e close_write --format '%w%f' /tmp | while read MODFILE
do
    echo need to rsync $MODFILE ...
done
51
отвечен Michał Šrajer 2023-04-11 21:44

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

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

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

27
отвечен jcharaoui 2023-04-12 00:01

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

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

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

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

20
отвечен harry 2023-04-12 02:18

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

2
отвечен Michał Šrajer 2023-04-12 04:35

то, что я сделал однажды, - это скрипт 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

запустить скрипт в новом терминале с именами файлов в качестве аргументов (после установки инструмента синхронизации).

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

0
отвечен Paŭlo Ebermann 2023-04-12 06:52

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

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

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

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

удачи !!

-1
отвечен Dragos 2023-04-12 09:09

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх