5 초마다 디렉토리 (A)의 변경 사항을 감지하고 변경된 파일을 (B) 원격 디렉토리에서 업로드 / 삭제하는 소프트웨어가 필요합니다.
비상업적 소프트웨어 인 https://github.com/devstructure/doubledown을 찾았습니다 . 상업적 대안이 있는지 궁금합니다.
5 초마다 디렉토리 (A)의 변경 사항을 감지하고 변경된 파일을 (B) 원격 디렉토리에서 업로드 / 삭제하는 소프트웨어가 필요합니다.
비상업적 소프트웨어 인 https://github.com/devstructure/doubledown을 찾았습니다 . 상업적 대안이 있는지 궁금합니다.
답변:
rsync 는 확실히이 작업에 적합한 도구입니다. 디렉토리를 동기화 상태로 유지하기 위해 존재하며 상당히 스마트하게 수행 할 수 있습니다. 예를 들어, 가능할 때마다 델타 만 전송하며 ssh 터널을 통해 작동 할 수 있습니다.
디렉토리 트리의 라이브 버전을 호스팅하는 머신 소스/my/tree
와 머신 싱크 와 밀접하게 동기화하려는 머신 싱크가 있다고 가정합니다. 싱크대에 ssh 계정이 있다면 소스 에서 rsync를 다음과 같이 사용할 수 있습니다.
rsync -avz --delete -e ssh /my/tree/ remoteuser@sink:/my/tree
이것은 소스/my/tree
에있는 싱크대 와 정확히 같은 지점에 있다고 가정합니다 . 물론 정확히 같은 지점에 보관할 필요는 없습니다.
명령 행 분석 :
-avz
: 보관 모드, 자세한 정보 표시, 전송 중 압축 사용--delete
: 소스에 없는 동기화 파일을 삭제합니다-e ssh
: 연결 방법으로 ssh를 사용하십시오.물론이 전화는 암호를 만들 때 묻습니다. 자동화 된 방식으로이 작업을 수행하려면 컴퓨터의 계정간에 일부 키를 공유하고 공개-개인 키 암호화를 사용하여 ssh 연결을 만들어야합니다.
이 rysnc에 대한 키 페어를 설정하려면 소스 시스템 에서 다음 명령을 실행하십시오 .
> ssh-keygen -t rsa -b 2048 -f ~/.ssh/my-rsync-key
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in ~/.ssh/my-rsync-key.
Your public key has been saved in ~/.ssh/my-rsync-key.pub.
The key fingerprint is:
2e:28:d9:ec:85:21:e7:ff:73:df:2e:07:78:f0:d0:a0 root@source
> chmod 600 ~/.ssh/my-rsync-key
이 키 쌍이 작동 하려면 싱크 시스템 ~/.ssh/my-rsync-key.pub
의 ~<remoteuser>/.ssh/authorized_keys
파일에 내용을 추가해야 합니다.
먼저 파일을 싱크 머신으로 복사하십시오 .
scp ~/.ssh/my-rsync-key.pub remoteuser@sink:~
그런 다음 싱크 머신으로 ssh하고 머신에서 원격 사용자로 다음을 실행하여 키를 가져옵니다 .
> if [ ! -d ~/.ssh ]; then mkdir ~/.ssh ; chmod 700 ~/.ssh ; fi
cd ~/.ssh/
if [ ! -f authorized_keys ]; then touch authorized_keys ; chmod 600 authorized_keys ; fi
cat ~/my-rsync-key.pub >> authorized_keys
rm ~/my-rsync-key.pub
소스 와 싱크 머신 사이의 ssh 연결을 잠그는 방법에 대한 추가 정보 는 이 페이지를 참조하십시오 .
당신의에서 소스 시스템이 설치를 실행하여 작동하는지 테스트 할 수 있습니다 :
rsync -avz --dry-run -e "ssh -i ~/.ssh/my-rsync-key" /my/tree/ remoteuser@sink:/my/tree
그것은 rsync의 건식 실행을 할 것입니다. 파일을 연결하고 비교하는 rsync 명령이 표시되면 설정이 올바르게 된 것입니다.
이제이 사이트의 유용한 답변에 표시된 것처럼 LaunchD 구성 파일에서이 rsync 명령을 쉽게 호출 할 수있는 방법이 필요합니다 . 이 호출이 타이트한 루프에서 발생하기를 원하기 때문에 동시에 여러 개의 rsync 사본이 실행되고 있지 않은지 확인해야합니다. flock을 사용하여 bash 스크립트가 싱글 톤임을 보장 하는 뮤텍스를 작성할 수 있습니다 . 머신에서 한 번에 하나의 인스턴스 만 실행됩니다. 디스크에 다음 스크립트를 만들겠습니다.
#!/bin/sh
SINK_INSTANCE=remoteuser@sink
DIR=/my/tree
KEY=~/.ssh/my-rsync-key
LOG = ~/my_rsync.log
LOCK = ~/my_rsync.lock
SOURCE=/my/tree
exec 9>${LOCK}
if ! flock -n 9 ; then
echo "Another instance of your rsync is already running";
exit 1
fi
echo "----------" >> ${LOG}
echo `date` >> ${LOG}
rsync -avz --delete -e "ssh -i ${KEY}" \
${SOURCE}/ {SINK_INSTANCE}:${SOURCE} 2>&1 >> ${LOG}
로 저장하십시오 ~/my_rsync.sh
.
이 스크립트는 rsync를 처리합니다. LaunchD를 통해 설정하고 타이트한 루프로 실행하면됩니다. 여기 에서 지시를 따르고 필요에 맞게 수정 ~/Library/LaunchAgents/my-rsync.plist
한 후 텍스트 편집기에서 작성하고 내용을 작성합니다.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>My Rsync</string>
<key>Program</key>
<string>/bin/sh</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>while sleep 5s; /Users/my/my_rsync.sh; done</string>
</array>
<key>ServiceDescription</key>
<string>Keep /my/tree synchronized with the machine sink</string>
<key>KeepAlive</key>
<true/>
</dict>
</plist>
그것은 일을 처리해야합니다.
일반적인주의 사항이 적용됩니다. 메모리에서 이것을 작성하고 테스트하지 않았습니다. 따라서 맹목적으로 따라 가지 마십시오. 길을 따라 신중하게 테스트하십시오. 의심 --dry-run
스러운 경우 rsync 옵션을 사용하십시오 . 그것은 무엇을 인쇄 할 수 있습니다 것입니다 실제로 아무것도하지 않고 했어요.
rsync
5 초마다 실행하는 대신 lsyncd 데몬을 사용하여 디렉토리 트리를 감시 할 수 있습니다.
OS X에서 작동 /dev/fsevents
하지만 플러그인 준비 .deb
파일 이 없습니다 . 컴파일하고 설치하는 것은 약간 괴짜입니다. 버전 2.0.6 (곧)을 출시 할 때까지 lsyncd 2.0.5에 알려진 OS X 버그가 있으므로 GIT 헤드를 사용하는 것이 좋습니다.
rsync 는이를위한 훌륭한 도구이며 Mac OS에 내장되어 있습니다. 두 위치의 차이점을 확인한 다음 네트워크 전체의 델타 변경 사항 만 복사합니다. 여분의 플래그가없는 rsync는 거의 정확하게 원하는 것을 수행합니다.
유일한 변경 사항은 변경 사항을 확인하기 위해 5 초마다 실행해야한다는 것입니다. 이미이 사이트에있는 훌륭한 예제와 함께 launchd를 사용하여이를 수행 할 수 있습니다 . 이 예에서는 스크립트가 계속 실행 된 다음 5 초 동안 휴면 한 다음 다시 실행되는 것처럼 보입니다.
이렇게 자주 실행하는 문제는 도구가 차이점을 확인해야한다는 것입니다. 5 초 동안 너무 많은 변경 사항이있는 경우 해당 변경 사항을 기록하고 전송하는 오버 헤드가 5 초 이상 걸릴 수 있습니다.
Folderwatch는 Appstore에 불과한 상업용 대안입니다. Folderwatch는 HFS-Plus 포맷 볼륨의 폴더를 실시간으로 외부 드라이브 및 AFP 파일 서버와 동기화합니다. http://itunes.apple.com/us/app/folderwatch/id408224368?mt=12