diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" index 94871e8f..dea2170c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\320\277\321\200\320\260\320\262\320\273\320\265\320\275\320\270\320\265\320\241\320\265\320\260\320\275\321\201\320\260\320\274\320\270.os" @@ -289,7 +289,7 @@ // соединения будет отключать всегда, так как могут быть зависшие Лог.Информация("Пауза перед отключением соединений"); Приостановить(Пауза_ДесятьСек); - ОтключитьСоединенияСРабочимиПроцессами(); + ОтключитьСоединения(); Сеансы = ПолучитьСписокСеансов(); Если Сеансы.Количество() = 0 Тогда @@ -510,99 +510,53 @@ КонецПроцедуры -Процедура ОтключитьСоединенияСРабочимиПроцессами() +Процедура ОтключитьСоединения() - Процессы = ПолучитьСписокРабочихПроцессов(); - - Для Каждого РабочийПроцесс Из Процессы Цикл - Если РабочийПроцесс["running"] = "yes" Тогда - - СписокСоединений = ПолучитьСоединенияРабочегоПроцесса(РабочийПроцесс); + СписокСоединений = ПолучитьСоединения(); Для Каждого Соединение Из СписокСоединений Цикл - - // Попытка - РазорватьСоединениеСПроцессом(РабочийПроцесс, Соединение); - // Исключение - // Лог.Ошибка(ОписаниеОшибки()); - // КонецПопытки; - + РазорватьСоединение(Соединение); КонецЦикла; - КонецЕсли; - КонецЦикла; - КонецПроцедуры -Функция ПолучитьСписокРабочихПроцессов() - - ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаЗапускаПроцессы = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("process list --cluster=""%1""%2", - МенеджерRac.ИдентификаторКластера(ОписаниеКластера), - МенеджерRac.КлючиАвторизацииВКластере()) + " " + Настройки.АдресСервераАдминистрирования; - - Лог.Информация("Получаю список рабочих процессов..."); - СписокПроцессов = ЗапуститьПроцесс(КомандаЗапускаПроцессы); - - Результат = МенеджерRAC.РазобратьПоток(СписокПроцессов); - - Возврат Результат; - -КонецФункции - -Функция ПолучитьСоединенияРабочегоПроцесса(Знач РабочийПроцесс) +Функция ПолучитьСоединения() ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаЗапускаСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection list --cluster=""%1""%2 --infobase=%3%4 --process=%5", + КомандаЗапускаСоединения = МенеджерRac.СтрокаЗапускаКлиента() + + СтрШаблон("connection list --cluster=""%1""%2 --infobase=%3%4", МенеджерRac.ИдентификаторКластера(ОписаниеКластера), МенеджерRac.КлючиАвторизацииВКластере(), МенеджерRAC.ИдентификаторБазы(), - МенеджерRAC.КлючиАвторизацииВБазе(), - РабочийПроцесс["process"]) + " " + Настройки.АдресСервераАдминистрирования; + МенеджерRAC.КлючиАвторизацииВБазе()) + " " + Настройки.АдресСервераАдминистрирования; - Результат = Новый Массив; - Лог.Информация("Получаю список соединений рабочего процесса..."); + Соединения = Новый Массив; + Лог.Информация("Получаю список соединений..."); Попытка Соединения = МенеджерRAC.РазобратьПоток(ЗапуститьПроцесс(КомандаЗапускаСоединения)); Исключение ТекстОшибки = ОписаниеОшибки(); - Если СтрНайти(ВРег(ТекстОшибки), "РАБОЧИЙ ПРОЦЕСС С УКАЗАННЫМ ИДЕНТИФИКАТОРОМ НЕ НАЙДЕН") = 0 Тогда - ВызватьИсключение; - КонецЕсли; Лог.Отладка("Пропускаю ошибку: " + ТекстОшибки); - - Соединения = Новый Массив; КонецПопытки; - Для Каждого ТекПроцесс Из Соединения Цикл - Если ВРег(ТекПроцесс["app-id"]) = "RAS" - Или Не МенеджерФильтраПриложений.СеансПодходит(ТекПроцесс["app-id"], ТекПроцесс["user-name"]) Тогда - Продолжить; - КонецЕсли; - - Результат.Добавить(ТекПроцесс); - - КонецЦикла; - - Возврат Результат; + Возврат Соединения; КонецФункции -Процедура РазорватьСоединениеСПроцессом(Знач РабочийПроцесс, Знач Соединение) +Процедура РазорватьСоединение(Знач Соединение) ОписаниеКластера = МенеджерRac.ОписаниеКластера(); - КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", + КомандаРазрывСоединения = МенеджерRac.СтрокаЗапускаКлиента() + + СтрШаблон("connection disconnect --cluster=""%1""%2 %3 --process=%4 --connection=%5", МенеджерRac.ИдентификаторКластера(ОписаниеКластера), МенеджерRac.КлючиАвторизацииВКластере(), МенеджерRAC.КлючиАвторизацииВБазе(), - РабочийПроцесс["process"], + Соединение["process"], Соединение["connection"]) + " " + Настройки.АдресСервераАдминистрирования; - Сообщение = СтрШаблон("Отключаю соединение %1 [%2] (%3)", - Соединение["conn-id"], - Соединение["app-id"], - Соединение["user-name"] - ); + Сообщение = СтрШаблон("Отключаю соединение %1 [%2]", + Соединение["conn-id"], + Соединение["application"]); Лог.Информация(Сообщение);