私たちはインタラクティブなキオスクの CPU をリモートの物理サイトに定期的に展開しており、各キオスク (Windows 7 Pro) とホストされた CMS (linode.com で実行されている仮想化された Ubuntu サーバー) の間でメディア アセットの夜間同期を実行するコンテンツ アップデーター アプリケーションを開発しました。 . コンテンツ アップデーターは C#/.NET で作成され、Process.Start() を使用して子 Unison プロセスを生成します。Unison は、秘密鍵を使用して SSH 経由でリモート サーバーに接続するように構成されています。
私たちが直面している問題は、Unison が ContentUpdater.exe から子プロセスとして生成されると、転送中にリモート サーバーとの通信を停止し、無期限にハングすることがよくあることです。単純な再現性はありません。動作することもありますが、多くの場合、ハングします。大規模な更新 (400MB 以上) では壊れやすいようですが、それは何よりも推測です。ハングした場合、クライアント (Windows 7) の Unison プロセスはまだ 25% の CPU 使用率を示しており、サーバーも同様に実行中の Unison プロセスを示しています。ネットワーク アクティビティはまったくありません。常にプロセスを開始し、転送の途中で取得するため、接続していることはわかっていますが、同じ場所で 2 回ハングすることはありません。Unison-2.40.63.exe のネイティブ Windows バイナリ ビルドを実行しています。
Windows の Unison コマンド ラインは次のようになります。
Unison-2.40.63.exe -contactquietly -silent -batch -sshcmd "C:\KioskManagement\Apps\ssh2plink.bat" -sshargs "-p 22 -i C:\cygwin\home\someuser\.ssh\contentupdater-rsync-key.ppk" -ignore "Path {innovations,todaytomorrow,scale,mooreslaw,brilliantminds,askafab}" ssh://cmsuser@server//home/cms/base-preview/webapps/ROOT/applications C:\kioskdir\temp\applications -force ssh://cmsuser@server//home/cms/base-preview/webapps/ROOT/applications
記録のために、私は元々 (Windows の cygwin を介して) rsync を使用するようにコンテンツ アップデーターを作成していましたが、同じ問題に直面していました。ssh トランスポートが問題の一部であるかどうかを確認するために、サーバー モード (rsyncd) で rsync を使用してみましたが、ハングは頭を悩ませ続けました。
この時点で、私は完全に困惑しています。この問題は他のサーバーでも再現されるため、Windows 側の問題だと思います。また、別のプロセス内で Process.Start() から Unison/rsync を呼び出したときにのみ問題が発生すると考える傾向があります (更新: コマンドラインから実行するときに再現するようになりました)-そうではないようですコマンドラインから直接実行すると失敗します。Unison/rsync もエラーになることはないので、チェックするログファイルはありません (リモートサーバー上のある種のサーバー側のトレースまたはログファイルを誰かが知っていない限り、私はチェックできます -- 完全な開示: 私は FreeBSD オタクであり、知っていますボンネットの下の Ubuntu についての貴重な情報はほとんどありません)。
あらゆる洞察/アイデア/解決策を前もって感謝します!
一番