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で接続し、マシンでremoteuserとして次のコマンドを実行してキーをインポートします。
> 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スクリプトがシングルトンであることを保証するミューテックスを作成できます。つまり、マシン上で一度に実行されるインスタンスは1つだけです。したがって、ディスク上に次のスクリプトを作成します。
#!/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
ファイルはありません。コンパイルしてインストールするのは少しマニアックです。lsyncd 2.0.5にはいくつかの既知のOS Xバグがあるため、バージョン2.0.6(まもなく)をリリースするまで、GITヘッドを使用することをお勧めします。
rsyncはこれに最適なツールであり、Mac OSに組み込まれています。2つの場所の違いをチェックし、ネットワーク全体の差分変更のみをコピーします。余分なフラグなしのrsyncは、あなたが探しているものとほぼ同じです。
唯一の追加は、変更をチェックするために5秒ごとに実行する必要があることです。これを行うには、launchdを使用します。優れた例がこのサイトに既にあります。この例では、スクリプトが実行され続け、5秒間スリープしてから再度実行されているように見えます。
これを頻繁に実行する際の問題は、ツールでも違いを確認する必要があることであり、5秒で変更が非常に多い場合、それらの変更を記録して転送するためのオーバーヘッドには5秒以上かかることがあります。
FolderwatchはAppstoreのみの11.99ドルの商用代替品です。Folderwatchは、HFS-Plusフォーマットのボリューム上のフォルダー(ミラー)を外部ドライブおよびAFPファイルサーバーにリアルタイムで同期します。http://itunes.apple.com/us/app/folderwatch/id408224368?mt=12