|
Зависают сеансы пользователей на сервере 1С | ☑ | ||
---|---|---|---|---|
0
AlexYurg
02.11.18
✎
15:50
|
Зависают сеансы ушедших пользователей на сервере 1С.
Платформа 1С - 8.3.12.1567 Сервер 1С - x64 Сервер БД - PostgreSQL 9.1.9-1.1C(x64) Настройки кластера: http://joxi.ru/J2bxe5WUXW80gr Проблема появилась после какого-то очередного обновления версии 1С. Поиск решения не дал вразумительных результатов. Прошу совета! |
|||
1
sergey198
02.11.18
✎
15:52
|
(0)та же проблема на 8.3.12
|
|||
2
AlexYurg
02.11.18
✎
15:59
|
(1) И что? Победили? Если да, то как, если нет, то почему?
|
|||
3
shuhard
02.11.18
✎
16:03
|
(2)[если нет, то почему?]
пятнично жши ещё |
|||
4
spiller26
02.11.18
✎
16:05
|
(0) Я выкидываю в полночь каждый день всех самописным фоновым заданием.
|
|||
5
AlexYurg
02.11.18
✎
16:10
|
(4) Значит, у вас та же проблема?
Всегда была или тоже возникла с переходом на 8.3.12? |
|||
6
spiller26
02.11.18
✎
16:16
|
(5) В 8.3.10.2252 появилась, пол года боролся, потом решил написать фоновое.
|
|||
7
spiller26
02.11.18
✎
16:17
|
(5) У нас сервак на Линуксе + Posgres + web-сервер на апаче.
|
|||
8
Вафель
02.11.18
✎
16:18
|
параметр "интервал перезапуска" не рекомндуют заполнять.
лучше скрипт запускай по расписанию |
|||
9
spiller26
02.11.18
✎
16:23
|
(5) вот код моего регламентного.
Процедура УдалениеСеансовВНазначенноеВремя() Экспорт Успех = Истина; пИмяАдминистратораКластера = ""; пПарольАдминистратораКластера = ""; пИмяАдминистратораИнформационнойБазы = ""; пПарольАдминистратораИнформационнойБазы = ""; //параметры Попытка ВремяУдаленияСеансов = Константы.abtВремяУдаленияСеансов.Получить(); ДатаУбийства = Дата(Год(ТекущаяДата()),Месяц(ТекущаяДата()),День(ТекущаяДата()), Час(ВремяУдаленияСеансов), Минута(ВремяУдаленияСеансов), Секунда(ВремяУдаленияСеансов)); пАдресСервераАдминистрирования = ""; пИмяИнформационнойБазыВКластере = ""; //Порт Сервера Администрирования пПортСервераАдминистрирования = СокрЛП(Константы.abtПортСервераАдминистрирования.Получить()); //"1545" пПортСервераАдминистрирования = ?(пПортСервераАдминистрирования = "", "1545", пПортСервераАдминистрирования); //Порт Кластера пПортКластера = СокрЛП(Константы.abtПортКластера.Получить()); //"1541"; пПортКластера = ?(пПортКластера = "", "1541", пПортКластера); //Имя Администратора Кластера пИмяАдминистратораКластера = СокрЛП(Константы.abtИмяАдминистратораКластера.Получить()); //Пароль Администратора Кластера пПарольАдминистратораКластера = СокрЛП(Константы.abtПарольАдминистратораКластера.Получить()); //Имя Администратора Информационной Базы ПользовательИнформационнойБазыРегламентныхЗаданий = Константы.abtПользовательИнформационнойБазыРегламентныхЗаданий.Получить(); Если НЕ ПользовательИнформационнойБазыРегламентныхЗаданий = Справочники.Пользователи.ПустаяСсылка() Тогда ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(ПользовательИнформационнойБазыРегламентныхЗаданий.ИдентификаторПользователяИБ); пИмяАдминистратораИнформационнойБазы = ?(ПользовательИБ = Неопределено, "", СокрЛП(ПользовательИБ.Имя)); КонецЕсли; //Пароль Администратора Информационной Базы пПарольАдминистратораИнформационнойБазы = СокрЛП(Константы.abtПарольПользователяИнформационнойБазыРегламентныхЗаданий.Получить()); Исключение Успех = Ложь; КонецПопытки; //Дополнительная проверка параметров для соединения к кластеру администрирования Если Успех Тогда Если пИмяАдминистратораКластера = "" Тогда Успех = Ложь; КонецЕсли; Если пПарольАдминистратораКластера = "" Тогда Успех = Ложь; КонецЕсли; Если пИмяАдминистратораИнформационнойБазы = "" Тогда Успех = Ложь; КонецЕсли; Если пПарольАдминистратораИнформационнойБазы = "" Тогда Успех = Ложь; КонецЕсли; КонецЕсли; Если Успех Тогда СтрокаСоединенияИБ = СтрокаСоединенияИнформационнойБазы(); //"File="/home/юзер/1cBases/Конфа";" или "Srvr="1c.Сервак.ru";Ref="Конфа";" ЭтоСервернаяБаза = Истина; Если СтрНайти(СтрокаСоединенияИБ, "File=") > 0 Тогда ЭтоСервернаяБаза = Ложь; //ФайловаяБаза Иначе МассивПараметровСоединенияИБ = РазложитьСтрокуНаПодстроки(СтрокаСоединенияИБ, ";"); //СерверИБ = //пАдресСервераАдминистрирования = Для Каждого СтрМассиваСоединенияИБ Из МассивПараметровСоединенияИБ Цикл Если СтрНайти(СтрМассиваСоединенияИБ, "Srvr=") > 0 Тогда пАдресСервераАдминистрирования = СтрЗаменить(СтрМассиваСоединенияИБ, "Srvr=", ""); пАдресСервераАдминистрирования = СтрЗаменить(пАдресСервераАдминистрирования, """", ""); ИначеЕсли СтрНайти(СтрМассиваСоединенияИБ, "Ref=") > 0 Тогда пИмяИнформационнойБазыВКластере = СтрЗаменить(СтрМассиваСоединенияИБ, "Ref=", ""); пИмяИнформационнойБазыВКластере = СтрЗаменить(пИмяИнформационнойБазыВКластере, """", ""); КонецЕсли; КонецЦикла; КонецЕсли; Если ЭтоСервернаяБаза Тогда //массив запущенных клиентов по которым будем отключать КлиентскиеПриложения = Новый Массив; КлиентскиеПриложения.Добавить(ВРег("1CV8")); //толстый клиент КлиентскиеПриложения.Добавить(ВРег("1CV8C")); //тонкий клиент КлиентскиеПриложения.Добавить(ВРег("WebClient")); //web-клиент КлиентскиеПриложения.Добавить(ВРег("COMConnection")); //внешнее соединение 1С:Предприятия через COM КлиентскиеПриложения.Добавить(ВРег("WSConnection")); //web-сервис //КлиентскиеПриложения.Добавить(ВРег("BackgroundJob")); //обработк заданий //КлиентскиеПриложения.Добавить(ВРег("SrvrConsole")); //консоль кластера //КлиентскиеПриложения.Добавить(ВРег("COMConsole")); //администрирование сессии внешнего соединения //КлиентскиеПриложения.Добавить(ВРег("JobScheduler")); //планировщик заданий //КлиентскиеПриложения.Добавить(ВРег("Designer")); //конфигуратор / отладка СеансыИнформационнойБазы = ПолучитьСеансыИнформационнойБазы(); НомераСеансов = Новый Массив; стСписокКРасстрелу = ""; Для Каждого СеансИБ Из СеансыИнформационнойБазы Цикл Если КлиентскиеПриложения.Найти(ВРег(СеансИБ.ИмяПриложения)) <> Неопределено Тогда Если СеансИБ.НачалоСеанса < ДатаУбийства Тогда Если СеансИБ.Пользователь.Имя <> пИмяАдминистратораИнформационнойБазы Тогда НомераСеансов.Добавить(СеансИБ.НомерСеанса); стСписокКРасстрелу = стСписокКРасстрелу + Строка(СеансИБ.Пользователь.Имя) + " "; КонецЕсли; КонецЕсли; КонецЕсли; КонецЦикла; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(стСписокКРасстрелу); //сообщение пользователю Если НомераСеансов.Количество() > 0 Тогда //Для COM //ПараметрыАдминистрирования = Новый Структура(); //ПараметрыАдминистрирования.Вставить("ТипПодключения", "COM"); // "COM" или "RAS" //ПараметрыАдминистрирования.АдресАгентаСервера = "ххх.ххх.ххх.ххх"; //ПараметрыАдминистрирования.ПортАгентаСервера = 1540; //по умолчанию в 1С используется 1540 //ПараметрыАдминистрирования.ПортКластера = 1541; //по умолчанию в 1С используется 1541 //Для RAS ПараметрыАдминистрирования = Новый Структура(); ПараметрыАдминистрирования.Вставить("ТипПодключения", "RAS"); // "COM" или "RAS" ПараметрыАдминистрирования.Вставить("АдресСервераАдминистрирования", пАдресСервераАдминистрирования); ПараметрыАдминистрирования.Вставить("ПортСервераАдминистрирования", Число(пПортСервераАдминистрирования)); //общее ПараметрыАдминистрирования.Вставить("ПортКластера", Число(пПортКластера)); //по умолчанию в 1С используется 1541 ПараметрыАдминистрирования.Вставить("ИмяАдминистратораКластера", пИмяАдминистратораКластера); //Если нет в кластере "Администратора", то нужно создать ПараметрыАдминистрирования.Вставить("ПарольАдминистратораКластера", пПарольАдминистратораКластера); ПараметрыАдминистрированияИБ = АдминистрированиеКластераКлиентСервер.ПараметрыАдминистрированияИнформационнойБазыКластера(); ПараметрыАдминистрированияИБ.ИмяВКластере = пИмяИнформационнойБазыВКластере; ПараметрыАдминистрированияИБ.ИмяАдминистратораИнформационнойБазы = пИмяАдминистратораИнформационнойБазы; ПараметрыАдминистрированияИБ.ПарольАдминистратораИнформационнойБазы = пПарольАдминистратораИнформационнойБазы; СтруктураСеанса = Новый Структура; СтруктураСеанса.Вставить("Свойство", "Номер"); СтруктураСеанса.Вставить("ВидСравнения", ВидСравнения.ВСписке); СтруктураСеанса.Вставить("Значение", НомераСеансов); Фильтр = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(СтруктураСеанса); АдминистрированиеКластераКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования, ПараметрыАдминистрированияИБ, Фильтр); //АдминистрированиеКластераRASКлиентСервер.УдалитьСеансыИнформационнойБазы(ПараметрыАдминистрирования, ПараметрыАдминистрированияИБ, Фильтр); //для Linux ЗаписьЖурналаРегистрации("УдалениеПользователейВНочи", УровеньЖурналаРегистрации.Информация, , , "Список пользователей к отключению: " + стСписокКРасстрелу); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры |
|||
10
AlexYurg
02.11.18
✎
16:40
|
(8) Насчет "интервала перезапуска" есть разные мнения. Это борьба с утечкой памяти.
|
|||
11
AlexYurg
02.11.18
✎
16:40
|
(9) Спасибо!
|
|||
12
Winnie Buh
02.11.18
✎
17:23
|
(0) RDP нет?
|
|||
13
Вафель
02.11.18
✎
17:30
|
(10) не рекомендуют, потому что не понятно в какое время будет этот перезапуск.
Если он придется на время работы юзеров, то никому не понравится |
|||
14
AlexYurg
02.11.18
✎
17:42
|
(12) Нет
(13) Согласен, но на обсуждаемую проблему это никак не влияет. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |