Linux: 단방향으로 지속적으로 파일 동기화

Linux: 단방향으로 지속적으로 파일 동기화

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

참고로, Windows에서 파일을 편집할 때 마침내 필요한 정확한 도구로 WinSCP를 선택했습니다. WinSCP에는 파일 시스템 감시 서비스를 사용하여 초기 동기화 및 지속적인 업데이트와 함께 다음 기능만 제공됩니다. 날짜".

Linux에서는 sshfs를 사용하여 동기화의 필요성을 완전히 피할 수 있다고 주장할 수 있습니다. Windows에서는 Samba-share도 동일한 작업을 수행합니다. 그러나 나는 IDE가 로컬 파일(SSD 디스크의!)과 작동하기를 원하며, PHP 인덱싱 및 기타 작업을 수행하기 위해 네트워크를 통해 이동할 필요가 없습니다.

그러나 sshfs는 솔루션의 일부일 수 있으므로 두 로컬 디렉터리 간에 지속적인 동기화가 수행되어야 합니다.

어떤 아이디어나 조언이 있나요?

답변1

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

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

답변2

Lsyncd이에 대한 좋은 해결책이 될 것입니다.

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

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

답변3

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

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

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

다른 rsync 명령과 마찬가지로 폴더 경로를 올바르게 지정하고 명령을 실행하기 전에 확인하십시오. 올바른 대상 디렉토리를 제공하는 것을 놓쳤기 때문에 원격 시스템 중 하나를 거의 죽일 뻔했습니다. 원격 경로를 놓치지 않도록 하고, 수행 중인 작업을 알지 못하는 경우 '/'를 사용하지 마십시오.

답변4

내가 한 일은 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

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

(저는 이것을 동기화가 아니라 컴파일을 시작하는 데 사용했지만 비슷한 방식으로 작동합니다.)

관련 정보