以前、Java で Linux コマンドを呼び出してファイルを同期する、ディザスター リカバリー マイクロサービスを実行したことがあります。元のビジネスでは IPV4 形式でのファイル同期をサポートしていましたが、その後、IPV6 環境に適応するために、関連する同期コマンドとすべての明示的なサポートを確認しましたが、独自のマイクロサービスでどのように呼び出しても、ファイルは同期されません。
原有命令:command =“rsync -rpoguPv —delete-e \”ssh -i $key_path \”$src_dir $dst_dir “
調べてみると、IPV6 では前後に [ ] の記号を 2 つ追加する必要があることが分かりましたが、それでもマイクロサービスでは成功しません。結局、Baidu で何百もの投稿を閲覧した結果、linux コマンドは角かっこのエスケープ文字であることがわかりました。java コマンドを介して直接呼び出された場合、2 つの記号は Linux システムに渡された後にエスケープされます。一致しないことが判明した場合、同期が必要な IP アドレスに対応するサーバーを取得できません。
その方法は、次のように、Java コマンドが実行スクリプトを呼び出す前に、追加した角かっこに文字列を追加し、Linux エスケープを実行して、2 つの二重スラッシュを追加します。
dstPath.apend(“\\[”+IP地址+“\\]”);
このように、元のコマンドに -6 属性を追加すると、安心してコマンドを呼び出すことができます。
修改后命令:
command =“rsync -rpoguPv6 —delete-e \”ssh -i $key_path \”$src_dir $dst_dir “
rsync コマンドについてはあまり紹介しません。Baidu にはたくさんあります。