web-dev-qa-db-ja.com

rsyncの調整TCPタイムアウト

コマンドsystem("rsync -rauzvq root@Host:/folder");を発行して、自分のC++プログラムでrsyncを使用しています。

これを使用して、複数のシステムの同期を維持します。

リモートホストがシャットダウンしてもプログラムとrsyncが実行されていると、プログラムがTCPタイムアウト)の間ハングするという問題が発生しました。 rsyncソケットのTCPタイムアウトパラメータを調整しますが、方法がわかりません(--sockoptsが機能していません)。

これを修正する別の方法は、フォークされたシステムコールを作成し、特定のタイムアウト後もrsync pIDがまだ存在するかどうかを確認することです。そうでない場合は、強制終了します。これの唯一の欠点は、プロセスが本当に同期しているのか、それともTCPタイムアウト?

それで、あなたたちは何を試みますか?

2
Evert

コマンドラインでは、rsyncはTCPを直接話していません。送信は、sshに依存しています。

次を使用できます。

RSYNC_RSH='ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -o ServerAliveCountMax=2' rsync ...
6