異なる場所に2つのRHEL 7.2 Linuxサーバーがあります。どちらも同じディレクトリ構造を持ちます。要件は、両方のサーバーの特定のディレクトリを同期状態に保つことです。つまり、server1のすべての修正はserver2に反映されなければならず、その逆も同様です。ただし、一部のファイルがローカルから削除された場合してはいけないリモートサーバーからも削除されます。 2つのサーバー間のリンクが失われている間に一部のファイルが変更された場合は、リンクが確立されるとすぐにコピーする必要があります。次のスクリプトを実装するには:
#!/bin/bash
EVENTS="CREATE,MOVED_TO,MODIFY"
inotifywait -e "$EVENTS" -m -r --format '%w%f' --fromfile list.txt|
while read FILE; do
echo $FILE
returnvalue=1
while [[ $returnvalue -ne 0 ]]
do
rsync -azr $FILE backupserver:/$FILE
returnvalue=$?
echo $returnvalue
if [[ $returnvalue -ne 0 ]]
then
sleep 60
fi
done
done
list.txtには、監視するすべてのディレクトリが含まれています。以下は、両方のサーバーで実行されるスクリプトです。
質問: server1でいくつかの修正が行われるたびに、それを検出してserver2にコピーします。戻りコード0。ただし、server2 では、これが新しい修正であることを検出し、ファイルが server1 に存在するため、server1 に再度コピーしようとします。 rsync が返されます。エラーコード23だから、プログラムが中断されます。
この問題に対する最善の解決策は何ですか?
メモ:--ignore-existing オプションは両側に同じファイルが存在するため使用できません。内容が変更された場合はファイルを更新する必要があります。
ベストアンサー1
**最初はこれがrsyncオプションの問題かもしれないと思いました**今は違うと思います!
答え:ローカルロックを使用してコピー権限を要求してください。
ディレクトリがない場合は、簡単なテストを実行することをお勧めします。まず、デフォルト値を使用し、何が期待どおりに機能しないかを確認します。
**rsync エントリが削除されました**
[OK] - ステップ4をバックアップしてもう一度見てください。
おそらく問題は循環論理であるかもしれません。
- ServerAにはLARGEFILEに対する変更があり、それを複製し始めます。
- ServerBでは、LARGEFILEはrsync / rcpコピー中に新しい/変更され、「即時」再コピーを試みます。
私はこの「即時性」が問題の原因だと思います。
私の提案は、「LOCK」ファイルタイプを追加することです。
- ロックをローカルに置く
- リモートロックを確認し、リモートで見つかった場合は、ローカルロックを削除し、ローカルinotifyを無視します。
- リモートで見つからない場合は、ファイルのコピーを開始し、コピーが完了したらロックを解除します。