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

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

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

Заранее благодарим за любые идеи и решения / *! 1014 *

Best

Ответы [ 3 ]

6 голосов
/ 31 июля 2012

У меня была эта проблема.Мне потребовалось несколько дней, чтобы решить это.Закончилось тем, что добавление -halfduplex решило мою проблему.

Как указано в документации:

halfduplex Когда этот флаг установлен в значение true, сетевая связь Unison вынуждена быть полудуплексной (клиент исервер никогда не испускает одновременно данные).Если у вас возникли проблемы с сетевым подключением, это может помочь.Связь всегда полудуплексная при синхронизации с машиной Windows из-за ограничения текущей реализации Unison, которое может привести к тупику.

В моем случае я выполнял синхронизацию между Windows / OSX.

3 голосов
/ 19 февраля 2013

Я подтверждаю, что настройка "halfduplex = true" решила мои проблемы с зависанием. В качестве центральной точки синхронизации у меня были настроены Win7 и OSX «клиенты» и сервер Linux. Все клиенты синхронизируются с сервером.

Проблемы начались, когда я представил клиенту Mac изображение, с тех пор обновления начали происходить в обоих направлениях. Установка "halfduplex = true" в профиле Unison решила мою проблему.

Как ни странно, Unison прекрасно синхронизировал гораздо меньший каталог между двумя клиентами Win7 и сервером Linux, но в этом случае файлы намного меньше.

1 голос
/ 08 июня 2012

Просто звонит;У меня та же проблема с использованием rsync / cygwin между двумя компьютерами Windows 7.Предыдущие обсуждения в сети предполагали, что проблема затрагивает только ssh-соединения, но метод rsync daemon для меня не работает.Есть сообщения, притворяющиеся, что нужно перекомпилировать rsync из сброса источника HAVE_SOCKETPAIR, что, как говорят, заставляет rsync / ssh работать.Я не удосужился попробовать это.

...