Linux : 한 방향으로 파일을 지속적으로 동기화 제공합니다. 데이트”. 리눅스에서는 동기화의 필요성을

시나리오 : IDE는 Linux 데스크탑 상자에 설정되어 PHP 파일을 로컬로 편집합니다. 파일을 저장할 때마다이 변경 사항이 Apache가 실행중인 Linux 서버에 나타나기를 원합니다. 서버에는 ssh (및 그 문제에 대한 samba 및 nfs)가 있습니다.

참고로, Windows에서 파일을 편집 할 때 WinSCP를 필요한 정확한 도구로 가져 왔습니다. WinSCP는 파일 시스템 감시 서비스를 사용하여 초기 동기화 및 지속적인 업데이트와 함께이 기능 만 제공합니다. 데이트”.

리눅스에서는 동기화의 필요성을 완전히 회피하기 위해 sshfs를 사용할 수 있다고 주장 할 수 있습니다. 창문에서 삼바 공유는 똑같이 할 것입니다. 그러나 IDE가 로컬 파일 (SSD 디스크에서)과 함께 작동하기를 원하지만 네트워크를 통해 PHP 인덱싱 및 기타 작업을 수행 할 필요가 없습니다.

그럼에도 불구하고 sshfs는 솔루션의 일부일 수 있으므로 두 개의 로컬 디렉토리간에 지속적인 동기화가 필요했습니다.

아이디어 나 조언이 있습니까?



답변

inotifywaitinotify-tools 패키지 에서도 사용할 수 있습니다 .

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


답변

Lsyncd가이 를위한 좋은 솔루션입니다.

Lsyncd는 로컬 디렉토리 트리 이벤트 모니터 인터페이스 (inotify 또는 fsevents)를 감시합니다. 몇 초 동안 이벤트를 집계 및 결합한 다음 하나 이상의 프로세스를 생성하여 변경 내용을 동기화합니다. 기본적으로 이것은 rsync입니다. 따라서 Lsyncd는 새로운 파일 시스템이나 블록 장치를 필요로하지 않고 비교적 쉽게 설치할 수 있으며 로컬 파일 시스템 성능을 저해하지 않는 경량 라이브 미러 솔루션입니다.

결론적으로, 다른 답변에서 제안한 것과 같은 종류의 도구를 사용하여 작업 (inotify 및 rsync)을 수행하지만 쉘 스크립팅에 익숙하지 않은 사람을 위해 설정하는 것이 더 쉽습니다.


답변

내 코드는 원격 상자에서 실행해야하고 로컬 컴퓨터에서 코드를 작성하기 때문에 이것이 많이 필요합니다. 로컬 폴더를 지속적으로 모니터링하고 원격 또는 로컬 폴더와 동기화하는 데 사용할 수있는 멋진 도구를 찾았습니다 : https://github.com/axkibe/lsyncd

ssh를 통해 로컬 디렉토리를 원격 시스템과 지속적으로 동기화하는 간단한 명령은 다음과 같습니다.

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

다른 rsync 명령과 마찬가지로 폴더 경로를 올바르게 지정하고 명령을 실행하기 전에 확인하십시오. 올바른 대상 디렉토리를 제공하지 않아서 원격 시스템 중 하나를 거의 죽였습니다. 원격 경로를 놓치지 말고 수행중인 작업을 모르는 경우 ‘/’를 사용하지 마십시오.


답변

파일 시스템을 관찰해야한다면, inotify가 그 방법입니다. 파일 시스템이 변경되면 동기화를 수행하기 위해 pyinotify 를 사용하여 간단한 파이썬 스크립트를 작성 합니다. 설명서를 참조하십시오 . 영감을 얻으 려면 autosync.py 를 확인하십시오 . 즐기세요


답변

한 번 한 일은 ls -l루프에서 실행 되고 (잠자는 동안) bash 스크립트 가 이전 출력과 비교되는 것입니다. 변경된 경우 동기화를 수행하십시오.

#!/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

파일 이름을 인수로 사용하여 새 터미널에서이 스크립트를 시작하십시오 (동기화 도구에 넣은 후).

(동기화하지 않고 컴파일을 시작하기 위해 이것을 사용했지만 비슷한 방식으로 작동합니다.)


답변

훨씬 더 간단한 접근법 :

samba (또는 nfs)를 사용하여 / var / www를 내보내고 서버에서 직접 파일을 작업하십시오.

또 다른 솔루션 : 대부분의 IDE는 다양한 배포 구성을 허용합니다. 자신에게 적합한 구성이 있는지 확인하십시오.

또는 Git, Bazaar 등과 같은 소스 코드 관리 시스템을 설정하십시오.

행운을 빕니다 !!


답변