Проблема «зависших» сеансов знакома каждому системному администратору 1С. Пользователи часто забывают закрывать программу перед уходом домой, что приводит к нерациональному использованию лицензий (в этом случае для анализа ситуации пригодится Консоль активности пользователей) и блокировкам при выполнении регламентных операций, например, при создании бэкапов. В этой статье мы подробно разберем механизмы управления сеансами, выясним, почему стандартные тайм-ауты не всегда срабатывают, и рассмотрим альтернативные способы автоматизации этого процесса — для этого подойдёт обработка для автоматического завершения сеансов 1С.
Для начала проанализируем штатные возможности платформы 1С:Предприятие 8.3. В консоли администрирования серверов 1С (утилита MMC или rac/ras) предусмотрены специальные параметры для каждой информационной базы. Чтобы сеансы начали завершаться автоматически, выполним следующие действия:
Рассмотрим подробнее три ключевых параметра:
1200 (20 минут).3600 (1 час).Важный нюанс: Многие путают «проблемные» сеансы и «спящие». Проблемный сеанс — это сеанс, у которого разорвано соединение с клиентом (например, при аварийном завершении 1С или обрыве сети). Спящий сеанс — это работающее приложение, которое просто не отправляет запросы к серверу.
Помимо консоли кластера, настройки тайм-аутов можно задать непосредственно в параметрах информационной базы через Конфигуратор. Разберем, как это сделать:
Конфигуратор.Эти настройки дублируют параметры в консоли кластера, но их полезно проверить, если вы не имеете прямого доступа к оснастке управления сервером.
Часто администраторы сталкиваются с ситуацией: настройки выставлены, но пользователи висят сутками. Проанализируем причину этого явления. В современных типовых конфигурациях (ERP, КА 2, УТ 11, ЗУП 3), построенных на базе Библиотеки стандартных подсистем (БСП), реализовано множество механизмов, которые «дергают» сервер в фоновом режиме:
Для платформы 1С любая такая активность считается «действием пользователя». Счётчик бездействия обнуляется, и сеанс никогда не переходит в категорию пассивного. В этом случае штатные средства консоли становятся бессильны. Рассмотрим, как решить эту проблему альтернативными путями.
Если ваши пользователи работают через Web-клиент или Тонкий клиент по протоколу HTTP/HTTPS, настройки кластера могут перекрываться настройками веб-сервера (IIS или Apache). В этом случае проанализируем файл default.vrd, который находится в каталоге публикации базы.
В структуре XML-файла нас интересует параметр sessionTimeout:
<point xmlns="http://v8.1c.ru/8.2/virtual-resource-system"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
base="/MyBase"
ib="Srvr="Server1C";Ref="MyBase";"
sessionTimeout="1800">
</point>
Здесь sessionTimeout задает время в секундах, через которое веб-сервер принудительно разорвет соединение при отсутствии активности со стороны браузера или тонкого клиента.
Самый надежный метод для серверных баз — использование внешнего скрипта, который будет игнорировать ложную активность БСП. Мы можем ориентироваться на свойство LastActiveTime (время последней активности). Для тех, кто предпочитает готовые инструменты, существует детализированный менеджер задач (процессов) 1С (поможет менеджер задач PowerTools для управления процессами 1С) с использованием PowerShell, который позволяет детально мониторить владельцев процессов и массово завершать их.
Если же писать скрипт самостоятельно, разберем логику его работы:
RAS (Remote Administration Server) или COM-объект.LastActiveTime сеанса.TerminateSession.Пример обращения к объекту сеанса через программный интерфейс:
Сеансы = Соединение.GetSessions(Кластер, ИнфоБаза);
Для Каждого Сеанс Из Сеансы Цикл
Если (ТекущаяДата() - Сеанс.LastActiveTime) > 18000 Тогда
Соединение.TerminateSession(Кластер, Сеанс);
КонецЕсли;
КонецЦикла;
Такой подход гарантированно освобождает лицензии, так как завершение происходит на стороне сервера принудительно.
Если пользователи работают в терминальном режиме, наиболее эффективно настроить Групповые политики (GPO). Проанализируем путь в редакторе политик: Конфигурация компьютера — Административные шаблоны — Компоненты Windows — Службы удаленных рабочих столов — Узел сеансов удаленных рабочих столов — Ограничения сеансов по времени.
Настроим параметр «Задать предел времени для активного, но бездействующего сеанса служб удаленных рабочих столов». Когда Windows завершит RDP-сеанс пользователя, связь с клиентом 1С разорвется. Дополнительно для обслуживания можно использовать утилиту, выполняющую очистку кэша 1С на терминальных серверах с принудительным закрытием сессий. После этого в консоли 1С сеанс станет «проблемным» и будет удален согласно настройкам кластера, о которых мы говорили в самом начале.
Не забудем и про штатный инструмент, встроенный во многие конфигурации. Найти его можно в разделе Администрирование — Обслуживание — Завершение работы пользователей. Хотя он чаще используется для блокировки входа перед обновлением, в нем можно установить параметр «Завершить работу пользователей через...». Однако этот метод является разовым.
Более функциональным решением может стать расширение Завершение работы пользователей для принудительного отключения или, если требуется комплексный подход, полноценный центр администрирования 1С (включая блокировки, бэкапы и управление сеансами из одной обработки). Для администраторов Linux-серверов также актуальна специальная обработка для автоматической установки и снятия блокировок.
Подводя итог, отметим: для эффективного решения задачи лучше всего комбинировать настройки спящих сеансов в консоли 1С (для борьбы с обрывами связи) и внешние скрипты или настройки терминального сервера (для борьбы с реально забытыми сессиями, которые имитируют активность фоновыми запросами).