私のアプリケーションは、パフォーマンスを向上させるために、rsync を使用してネットワーク ドライバーからローカルにファイルをキャッシュとしてコピーします。
しかし、私のアプリケーションはrsyncのように並列実行される可能性があり、2つのインスタンスがrsync同じソースとディレクトリに対して並行して実行されます。
同期先が完全に同期されない(サブディレクトリが1つ空のままになる)という問題に遭遇しました。rsyncの問題ではないと思いますので、
- rsync は、同じソースから同じ宛先にファイルを並行してコピーしても安全ですか?
- このような操作の正確性を保証するために利用できるオプションはありますか。
私が使用しているオプションは次のとおりです。
rsync -a --copy-unsafe-links --delete
答え1
rsyn を並列で実行することはおそらく安全ですが、rsync が最初に転送するファイルのリストを作成するため、ファイルが 2 回転送される可能性が高く、効率的ではありません。もちろん、両方の rsync によって同じファイルが同時に転送される可能性は常にわずかにありますが、その後の内容は同じになるはずです。
二重実行を防ぐために、通常は、touch
最後に削除されるロックファイルをチェックし、そうでない場合はロックファイルを削除するスクリプトを作成します。オプションとして、スクリプトを中断した場合やエラーが発生した場合に、スクリプト内でトラップを使用してロックファイルをクリーンアップすることができます (シェル内で 'help trap' を使用します)。私の知る限り、rsync 自体にはそのようなロック メカニズムはありません (いずれにしても実装は困難です)。