Синхронизация Unison между Windows/Linux случайным образом зависает во время передачи.

Мы регулярно развертываем процессоры интерактивных киосков на удаленных физических сайтах, и я разработал приложение для обновления содержимого, которое выполняет ночную синхронизацию мультимедийных ресурсов между каждым киоском (Windows 7 Pro) и размещенной CMS (виртуализированной сервер Ubuntu, работающий на linode.com). Средство обновления содержимого создано на C#/.NET и порождает дочерний процесс Unison с помощью Process.Start(). Unison настроен на подключение к удаленному серверу через SSH с использованием закрытого ключа.

Проблема, с которой мы сталкиваемся, заключается в том, что при запуске в качестве дочернего процесса из ContentUpdater.exe Unison часто просто прекращает связь с удаленным сервером во время передачи и зависает на неопределенный срок. Простой реплики нет - иногда работает, чаще зависает. Он кажется более хрупким при больших обновлениях (400 МБ+), но это больше предположение, чем что-либо еще. Когда он зависает, процесс Unison на клиенте (Windows 7) по-прежнему показывает загрузку ЦП на 25%, а сервер также показывает работающий процесс unison — сетевой активности просто нет. Я знаю, что он подключается, потому что он всегда запускает процесс и проходит часть передачи, но он никогда не зависает в одном и том же месте дважды. Я использую собственную двоичную сборку Unison-2.40.63.exe для Windows и ту же версию unison на удаленном сервере.

Командная строка Unison в Windows выглядит следующим образом:

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

Для справки: изначально я создал средство обновления контента для использования rsync (через cygwin в Windows), но столкнулся с теми же проблемами. Чтобы убедиться, что ssh-транспорт является частью проблемы, я попытался использовать rsync в режиме сервера (rsyncd), но зависание продолжало появляться.

На данный момент я совершенно запутался. Проблема возникает и на других серверах, поэтому я думаю, что это связано с Windows. Я также склонен полагать, что проблема возникает только при вызове Unison/rsync из Process.Start() внутри другого процесса (ОБНОВЛЕНИЕ: я только что воспроизвел его при запуске из командной строки) - похоже, это не так. терпит неудачу при запуске непосредственно из командной строки. Unison/rsync также никогда не выдает ошибок, поэтому нет файлов журналов для проверки (если только кто-нибудь не знает какой-либо трассировки на стороне сервера или файла журнала на удаленном сервере, который я могу проверить — полное раскрытие: я фанат FreeBSD и знаю драгоценное немного о Ubuntu под капотом).

Заранее спасибо за любые идеи/идеи/решения!

Best

5
задан darrendavid 19 March 2012 в 04:29
поделиться