Зависший пользователь держит базу: снимаем сеанс через консоль, rac и блокировку

· 10 мин

Содержание

Принудительно завершить сеанс пользователя в 1С быстрее всего в Консоли администрирования серверов: Кластеры → <кластер> → Информационные базы → <база> → Сеансы, правой кнопкой по нужной строке → Удалить. Без консоли то же делает утилита rac командой session terminate, а из самой программы — форма «Активные пользователи» в типовых конфигурациях.

Ситуация обычная: вечером нужно обновить конфигурацию , а один пользователь ушёл домой с открытой 1С, и база не переходит в монопольный режим. Или сеанс «повис» после обрыва связи и занимает лицензию. Способы есть и для клиент-серверной, и для файловой базы: от мягкого предупреждения до снятия процесса.

Принудительное завершение рвёт работу человека без сохранения. Незаписанный документ пропадёт, а если сеанс был внутри длинной транзакции (проведение партии документов, закрытие месяца), СУБД откатит её целиком. Сначала предупредите пользователя.

Сеанс, соединение, тип клиента: что именно вы завершаете

В клиент-серверной 1С важно различать два объекта в консоли.

  • 🔹 Сеанс — логическая работа пользователя с базой: кто вошёл, под какой учётной записью, какую лицензию занял, какие данные держит.
  • 🔹 Соединение — сетевая связь клиентского приложения с рабочим процессом сервера. Одному сеансу в разные моменты могут соответствовать разные соединения.

Если удалить только соединение, клиент часто переподключается, и сеанс продолжает жить. Чтобы человек действительно вылетел из базы, удаляйте именно сеанс, а не соединение.

В списке сеансов колонка «Приложение» показывает, откуда подключение. По ней видно, что можно трогать без раздумий, а что нет.

Тип в колонке «Приложение»Что этоМожно ли завершать
Тонкий клиент, толстый клиентОбычная работа пользователяДа, предупредив человека
Веб-клиентРабота через браузерДа
КонфигураторРазработчик или администратор в КонфигуратореТолько после согласования: можно потерять несохранённые изменения конфигурации
Фоновое заданиеРегламентные и фоновые заданияОсторожно: прервётся обмен, загрузка курсов, расчёт
COM-соединение, веб-сервис, HTTP-сервисВнешние программы, интеграции, сайтТолько понимая, чья это интеграция
Консоль кластераСама консоль администрированияНе нужно

Фоновые задания после удаления сеанса обычно запускаются заново по своему расписанию. Чтобы они не мешали обновлению, их не убивают по одному, а блокируют на время работ (об этом ниже).

Консоль администрирования серверов: удалить сеанс за минуту

Консоль ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). В меню «Пуск» ищите ярлык «Администрирование серверов 1С Предприятия».

Шаг за шагом

  1. Откройте консоль. Если сервер ещё не добавлен, правой кнопкой по Central 1C:Enterprise 8.3 servers → Создать → Центральный сервер 1С:Предприятия, укажите имя сервера и порт агента 1540.
  2. Раскройте <сервер> → Кластеры → <кластер>. Если на кластере заданы администраторы, консоль запросит логин и пароль.
  3. Перейдите в Информационные базы → <нужная база> → Сеансы. Справа появится список с колонками «Пользователь», «Компьютер», «Приложение», «Начало сеанса», «Последняя активность».
  4. Найдите строку по имени пользователя и компьютеру. Смотрите на «Последнюю активность»: зависший сеанс обычно не обновлялся десятки минут.
  5. Правой кнопкой → Удалить. Подтвердите.

У пользователя появится сообщение о разрыве связи с сервером, программа закроется или предложит перезапуск.

Если удалить нужно всех сразу, выделите строки с Shift или Ctrl и удалите разом. Строки с типом «Консоль кластера» и свою собственную сессию Конфигуратора не трогайте.

Если консоль не открывается

Частая причина — не зарегистрирована библиотека оснастки после установки или обновления платформы. Запустите командную строку от имени администратора и выполните:

"C:\Program Files\1cv8\8.3.24.1548\bin\RegMSC.cmd"

Номер версии в пути замените на свою. Если файла RegMSC.cmd нет, зарегистрируйте библиотеку вручную той же версии, что и сервер:

regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"

Версия консоли должна совпадать с версией сервера. Консоль от 8.3.22 к кластеру 8.3.24 подключится с ошибкой или не подключится вовсе.

Завершение из самой программы: «Активные пользователи» и блокировка

Когда доступа к серверу нет, а права администратора в базе есть, работает встроенный механизм типовых конфигураций на БСП (Бухгалтерия 3.0, ЗУП 3.1, УТ 11, КА, ERP).

Список активных пользователей

В БП 3.0 и ЗУП 3.1 откройте Администрирование → Обслуживание и в группе «Служебные операции» выберите «Активные пользователи». В форме видно всех, кто сейчас в базе, с типом приложения и временем начала работы.

Выделите строку и нажмите «Завершить сеанс». В клиент-серверной базе программа сама обратится к кластеру. Если в кластере заданы администраторы, она спросит их логин и пароль: без них команда не сработает.

Форма «Активные пользователи» есть и в Конфигураторе (Администрирование → Активные пользователи), но там это только просмотр. Завершить чужой сеанс из Конфигуратора нельзя.

Блокировка работы пользователей

Это мягкий и правильный способ перед регламентными работами. Там же, в Администрирование → Обслуживание, найдите «Блокировка работы пользователей».

  1. Укажите время начала и окончания блокировки.
  2. Напишите сообщение: его увидят пользователи («Обновление базы с 19:00 до 20:00, сохраните документы»).
  3. При необходимости задайте код разрешения: с ним администратор войдёт в базу во время блокировки.
  4. Нажмите «Установить блокировку».

Пользователи заранее получат предупреждение, а к моменту начала программа завершит их сеансы сама. Для входа во время блокировки запускайте 1С с параметром /UC<код>, например /UC12345. Параметр добавляется в строку запуска в свойствах базы в окне запуска («Дополнительные параметры запуска»).

Командная строка: утилиты ras и rac

Когда серверов несколько, консоли нет под рукой или сервер на Linux, сеансы удобнее снимать из командной строки. Схема такая: ras — служба-посредник, которая подключается к агенту кластера, rac — клиент, через который вы отдаёте команды.

Запуск ras

Разово, для проверки, на сервере 1С:

"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --port=1545 localhost:1540

Чтобы ras работал постоянно, зарегистрируйте его службой Windows:

sc create "1C:Enterprise 8.3 Remote Server" binPath= "\"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe\" cluster --service --port=1545 localhost:1540" start= auto DisplayName= "1C:Enterprise 8.3 Remote Server"
sc start "1C:Enterprise 8.3 Remote Server"

На Linux утилиты лежат в /opt/1cv8/x86_64/<версия>/, ras запускают с ключом --daemon.

Порядок команд rac

Сначала узнайте идентификатор кластера:

rac cluster list

Затем базы и их идентификаторы:

rac infobase summary list --cluster=<uuid-кластера>

Список сеансов конкретной базы:

rac session list --cluster=<uuid-кластера> --infobase=<uuid-базы>

В выводе у каждого сеанса есть поля session (идентификатор для удаления), user-name, host, app-id, started-at, last-active-at. Завершение:

rac session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>

Если на кластере заданы администраторы, к каждой команде добавьте --cluster-user=<логин> --cluster-pwd=<пароль>. Для удалённого сервера укажите в конце адрес ras, например srv1c:1545. Полный список параметров — в rac help session.

Снять все сеансы базы скриптом

Пример на PowerShell перед ночным обновлением. Он находит все сеансы базы и завершает их по очереди:

$rac     = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$cluster = "<uuid-кластера>"
$ib      = "<uuid-базы>"

$ids = & $rac session list --cluster=$cluster --infobase=$ib |
    Select-String '^session\s+:' |
    ForEach-Object { ($_.Line -split ':', 2)[1].Trim() }

foreach ($id in $ids) {
    & $rac session terminate --cluster=$cluster --session=$id
}

Шаблон ^session\s+: ловит только строку с идентификатором сеанса и пропускает session-id (порядковый номер). Если нужно оставить, например, фоновые задания, отфильтруйте их по полю app-id перед удалением.

Монопольный режим и блокировки: когда сеансы мешают работе

Чаще всего сеансы снимают из-за монопольного режима. Он нужен для обновления структуры базы (Обновить конфигурацию базы данных), загрузки .dt, тестирования и исправления. Пока в базе есть хоть один чужой сеанс, платформа выдаёт ошибку вида Ошибка установки монопольного режима и перечисляет мешающих.

Надёжный порядок для клиент-серверной базы:

  1. За 10–15 минут поставьте блокировку работы пользователей с сообщением.
  2. В консоли кластера откройте свойства базы и включите «Блокировка регламентных заданий включена» — иначе фоновые задания будут стартовать снова.
  3. Там же можно включить «Блокировка начала сеансов включена», задать сообщение и код разрешения. Это блокировка на уровне кластера: она работает, даже если конфигурация не типовая.
  4. Удалите оставшиеся сеансы в консоли или через rac.
  5. После работ снимите обе блокировки. Забытая блокировка регламентных заданий — частая причина того, что обмены и загрузка курсов «сами перестали работать».

Сеанс держит блокировку данных

Бывает и обратная ситуация: монопольный режим не нужен, но один сеанс повис посреди записи и держит данные. Остальные получают ошибки ожидания блокировки или таймаут.

Найти виновника помогают поля в выводе rac session list: blocked-by-dbms и blocked-by-ls показывают номер сеанса, который блокирует текущий (на уровне СУБД и управляемых блокировок соответственно). В консоли кластера те же сведения выводятся колонками списка сеансов. Завершать нужно сеанс-блокировщик, а не тех, кто ждёт.

Файловая база: что делать без кластера

У файловой базы нет сервера и консоли, поэтому удалённо «удалить сеанс» нельзя. Варианты:

  • 🔸 Блокировка работы пользователей из типовой конфигурации. Сеансы завершаются сами, как описано выше. Это основной способ.
  • 🔸 Закрыть 1С на рабочем месте пользователя: через удалённый доступ или диспетчер задач, процессы 1cv8c.exe (тонкий клиент) и 1cv8.exe (толстый клиент, Конфигуратор).
  • 🔸 Закрыть открытый файл на файловом сервере. В Windows: Управление компьютером → Общие папки → Открытые файлы, найдите 1Cv8.1CD и закройте его для нужного пользователя.

Закрытие 1Cv8.1CD или снятие процесса во время записи может повредить файловую базу. Делайте это, только если человек точно ничего не проводит, и после сделайте копию каталога базы. Если после такого вмешательства база не открывается, запустите «Тестирование и исправление» в Конфигураторе на копии.

Какая у вас ситуация?

Почему сеансы зависают и как сделать, чтобы это повторялось реже

Типичные причины «висящих» сеансов:

  • 🔌 обрыв сети или VPN: клиент исчез, а сервер ещё какое-то время считает сеанс живым;
  • 💤 спящий режим ноутбука с открытой 1С;
  • 🖥 пользователь закрыл окно RDP крестиком, а не вышел из сеанса Windows, и 1С осталась работать на терминальном сервере;
  • ⏳ долгий серверный вызов: тяжёлый отчёт или проведение, которое упёрлось в блокировку;
  • 🔁 внешняя интеграция открывает COM-соединения и не закрывает их.

Что помогает:

  1. Параметры засыпания и завершения сеансов. В свойствах информационной базы в консоли кластера есть настройки времени засыпания пассивного сеанса и времени завершения спящего сеанса (в секундах). Заданные значения сами снимают брошенные сеансы и освобождают лицензии.
  2. Отключение сеансов RDP. На терминальном сервере настройте в групповой политике лимит для отключённых сеансов, чтобы через заданное время Windows завершала их вместе с 1С.
  3. Технологический журнал. Если зависания повторяются, включите сбор событий в файле logcfg.xml в каталоге conf платформы. События TLOCK, TTIMEOUT и TDEADLOCK показывают, кто кого ждал и сколько. Журнал быстро растёт: включайте его на время расследования и ограничивайте срок хранения.
  4. Разбор интеграций. Если в списке копятся COM-соединения от одного компьютера, проблема в коде внешней программы, а не в 1С.

Права и аудит: кто может завершать сеансы и где это видно

По умолчанию у нового кластера администраторов нет. Это значит, что любой, кто дотянется до порта 1540 или 1545, может открыть консоль или rac и удалить любой сеанс, в том числе у главного бухгалтера посреди закрытия месяца.

Минимальные меры:

  • 🔐 Добавьте администратора кластера: в консоли <кластер> → Администраторы → Создать. Затем администратора центрального сервера: <сервер> → Администраторы. Пароли храните в менеджере паролей, а не в скриптах.
  • 🧱 Закройте порты 1540, 1541, 1545 и диапазон рабочих процессов брандмауэром для всех, кроме клиентов 1С и машин администраторов. Порт 1545 (ras) пользователям вообще не нужен.
  • 👤 Право завершать сеансы из «Активных пользователей» выдавайте только профилю администратора.

Где искать следы. Завершение сеанса попадает в журнал регистрации базы: Администрирование → Обслуживание → Журнал регистрации, отбор по событию «Сеанс. Завершение» и по пользователю. Видно, когда сеанс закончился, но журнал регистрации не всегда покажет, кто именно его снял из консоли. Для такого аудита в технологическом журнале актуальных версий платформы есть событие ADMIN: оно фиксирует действия администратора кластера.

Договоритесь в компании о простом правиле: перед массовым завершением сеансов администратор пишет в общий чат и ставит блокировку с сообщением. Так меньше претензий за потерянный документ.

Частые вопросы

Освобождается ли лицензия сразу после удаления сеанса?
Да, клиентская лицензия освобождается вместе с сеансом. Проверить можно командой rac session list --cluster=<uuid-кластера> --licenses.
Почему удалённый сеанс через минуту появился снова?
Скорее всего, вы удалили соединение, а не сеанс, или это фоновое задание, которое перезапустилось по расписанию. Удаляйте строку в узле «Сеансы» и блокируйте регламентные задания.
Можно ли завершить сеанс без прав администратора кластера?
Если администраторы кластера заданы — нет. Без них консоль и rac пускают любого, у кого есть сетевой доступ к серверу, поэтому такую настройку стоит исправить.
Что увидит пользователь, чей сеанс завершили?
Сообщение о разрыве соединения с сервером. Несохранённые изменения пропадут. При блокировке работы пользователей он заранее получит ваше предупреждение.
Чем блокировка в консоли отличается от блокировки в программе?
Блокировка начала сеансов в консоли работает на уровне кластера для любой конфигурации. Блокировка в «Обслуживании» — механизм типовых конфигураций: она предупреждает пользователей и сама закрывает их сеансы.