Завершение чужих сеансов в кластере 1С 8.3: консоль, rac и блокировка базы

· 9 мин

Содержание

Чтобы отключить пользователя 1С на сервере, откройте консоль Администрирование серверов 1С Предприятия, найдите базу в ветке Кластеры → <кластер> → Информационные базы → <база> → Сеансы, щёлкните правой кнопкой по сеансу нужного пользователя и выберите «Удалить». Сеанс завершится, у пользователя появится сообщение о разрыве, лицензия освободится.

Если консоли под рукой нет, тот же результат дают форма «Активные пользователи» в самой программе и утилита командной строки rac. Всё ниже относится к клиент-серверному варианту платформы 8.3 и одинаково работает для 1С:Бухгалтерии, ЗУП, УТ и любых других конфигураций.

Что проверить перед отключением сеансов

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

Перед работой проверьте три вещи:

  • 🔑 Права администратора кластера. Логин и пароль кластера — это не пользователь базы и не учётная запись Windows. Их задают в консоли в ветке Администраторы кластера.
  • 🔑 Администратор информационной базы. Чтобы открыть список сеансов конкретной базы, консоль может запросить пользователя этой базы с правом администрирования.
  • 🖥 Доступ к агенту сервера. Консоль подключается к агенту по порту 1540. Если порт закрыт брандмауэром, консоль не увидит кластер.

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

Классическая ситуация: консоль запускается, но вместо дерева показывает ошибку оснастки. Обычно это значит, что не зарегистрирована библиотека radmin.dll нужной версии. После обновления платформы консоль часто ссылается на старую сборку.

Запустите командную строку от имени администратора и выполните:

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

Номер в пути замените на версию платформы, установленную на сервере. Разрядность библиотеки должна совпадать с разрядностью консоли: для 64-битной платформы — C:\Program Files, для 32-битной — C:\Program Files (x86).

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

Отключение пользователя через консоль кластера

Это основной способ. Он работает даже тогда, когда база зависла и в режим «Предприятие» не войти.

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

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

Сеанс или соединение

В ветке базы есть два узла: «Сеансы» и «Соединения». Их часто путают.

Что удалитьЧто произойдётКогда использовать
СеансПользователь выходит, лицензия освобождается, несохранённые данные теряютсяНужно выгнать человека из базы
СоединениеРвётся связь клиента с рабочим процессом, сеанс может остатьсяПочти никогда, только при диагностике

Удаляйте именно сеансы. Удалённое соединение клиент восстановит сам, а сеанс продолжит висеть и держать лицензию.

Как понять, кого отключать

Колонка «Приложение» подсказывает, что это за сеанс:

  • 🖥 1CV8C — тонкий клиент, обычный пользователь.
  • 🖥 1CV8 — толстый клиент.
  • 🌐 WebClient — работа через браузер.
  • 🛠 Designer — открытый Конфигуратор.
  • ⚙️ BackgroundJob — фоновое задание, его запускает сама база.
  • 🔌 COMConnection — внешнее подключение, например обмен из другой программы.

Фоновые задания и COM-подключения не трогайте без причины. Если оборвать обмен на середине, часть данных может не загрузиться, и пакет придётся отправлять заново.

Управление сеансами из самой программы

В типовых конфигурациях на БСП — 1С:Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP — есть своя форма со списком сеансов. Она удобна, когда доступа к серверу нет, а права администратора в базе есть. Работает в тонком клиенте и в веб-клиенте через браузер.

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

Чтобы отключить человека:

  1. Выделите его строку в списке.
  2. Нажмите «Завершить сеанс».
  3. При первом запуске программа запросит параметры администрирования: логин и пароль администратора кластера и, при необходимости, администратора базы.

Программа передаст команду серверу, и сеанс закроется так же, как из консоли.

Блокировка входа на время работ

Если отключить людей нужно перед обновлением или закрытием периода, мало выгнать всех сразу: через минуту кто-то зайдёт снова. Для этого служит блокировка.

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

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

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /UC12345

Блокировку можно поставить и снять параметрами запуска, без захода в форму. Это удобно в скриптах обновления:

1cv8.exe ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC12345
1cv8.exe ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"РазрешитьРаботуПользователей" /UC12345

В консоли кластера то же самое делается в свойствах информационной базы: флажок «Блокировка начала сеансов включена», поля начала, окончания, сообщения и кода разрешения. Там же отдельный флажок блокирует регламентные задания.

Команды rac: отключение пользователей из командной строки

Утилита rac работает через сервер администрирования ras. Оба файла лежат в каталоге bin платформы. Этот путь выбирают, когда нужно автоматизировать отключение или управлять сервером без графической оболочки, например на Linux.

Запуск сервера администрирования

Если ras ещё не запущен, запустите его вручную или установите службой. Ручной запуск на сервере:

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

Порт 1545 — значение по умолчанию. Дальше rac подключается к нему.

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

  1. Узнайте идентификатор кластера:
rac.exe localhost:1545 cluster list

В ответе строка cluster : <uuid> — это и есть нужный идентификатор.

  1. Посмотрите базы и найдите идентификатор своей:
rac.exe localhost:1545 infobase summary list --cluster=<uuid кластера> --cluster-user=admin --cluster-pwd=пароль
  1. Выведите сеансы базы:
rac.exe localhost:1545 session list --cluster=<uuid кластера> --infobase=<uuid базы> --cluster-user=admin --cluster-pwd=пароль

Каждый сеанс выводится блоком строк вида ключ : значение. Нужны поля session (идентификатор), user-name, host, app-id и last-active-at.

  1. Завершите нужный сеанс:
rac.exe localhost:1545 session terminate --cluster=<uuid кластера> --session=<uuid сеанса> --cluster-user=admin --cluster-pwd=пароль

Если кластер без администратора, параметры --cluster-user и --cluster-pwd не нужны. Полный список параметров каждой команды покажет rac help session.

Чтобы посмотреть, сколько лицензий занято и кем, добавьте к списку сеансов ключ --licenses: rac.exe localhost:1545 session list --cluster=<uuid> --licenses.

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

Чаще всего пользователя отключают не просто так: он ушёл домой с открытой базой, ушёл в отпуск или его сеанс повис и держит данные. Прежде чем удалять, полезно понять причину, иначе через день картина повторится.

Диагностика: выберите симптом

Где смотреть, кто кого блокирует

В списке сеансов консоли есть колонки с временем, проведённым в ожидании блокировок СУБД и управляемых блокировок 1С, а также колонка текущего вызова. Сеанс, у которого текущий вызов длится минуты, — главный подозреваемый.

Подробнее картину даёт узел «Блокировки» в ветке кластера или базы. В нём видно, какой сеанс захватил какой объект. Для разбора повторяющихся проблем включают технологический журнал с событиями TLOCK и TDEADLOCK, но это уже работа на несколько дней, а не разовое отключение.

Крайний случай: завершение рабочего процесса

Если сеанс не удаляется и тормозит всю базу, остаётся перезапустить рабочий процесс rphost. Это оборвёт все сеансы, которые обслуживает этот процесс, а не только нужный. Пользователи потеряют несохранённые документы.

Делайте это в нерабочее время или после предупреждения коллег. Остановку службы «Агент сервера 1С:Предприятия 8.3» и перезагрузку сервера оставьте на совсем безвыходный случай: тогда отключатся вообще все базы кластера.

Автоматическое отключение брошенных сеансов

Ручная чистка помогает один раз. Чтобы брошенные сеансы не копились, настройте автоматику на двух уровнях.

Таймауты в самой базе

Платформа умеет усыплять пассивный сеанс и затем завершать спящий. Значения задаются в Конфигураторе: Администрирование → Параметры информационной базы, поля про время засыпания пассивного сеанса и время завершения спящего сеанса (в секундах). Спящий сеанс не занимает клиентскую лицензию, а по истечении второго таймаута закрывается совсем.

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

Скрипт по расписанию

Для «забытых» сеансов пишут скрипт на rac и ставят его в Планировщик заданий Windows, например на 22:00. Пример на PowerShell завершает сеансы тонкого, толстого и веб-клиента, в которых не было активности больше двух часов:

$rac      = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$ras      = "localhost:1545"
$auth     = @("--cluster-user=admin", "--cluster-pwd=пароль")
$idleMin  = 120
$apps     = @("1CV8", "1CV8C", "WebClient")

function Parse-Rac($lines) {
    $items = @(); $cur = @{}
    foreach ($line in $lines) {
        if ($line -match '^\s*$') {
            if ($cur.Count) { $items += [pscustomobject]$cur; $cur = @{} }
            continue
        }
        $key, $val = $line -split '\s*:\s*', 2
        $cur[$key.Trim()] = "$val".Trim()
    }
    if ($cur.Count) { $items += [pscustomobject]$cur }
    return $items
}

$cluster  = (Parse-Rac (& $rac $ras cluster list))[0].cluster
$sessions = Parse-Rac (& $rac $ras session list "--cluster=$cluster" @auth)
$border   = (Get-Date).AddMinutes(-$idleMin)

foreach ($s in $sessions) {
    if ($apps -notcontains $s.'app-id') { continue }
    if ([datetime]$s.'last-active-at' -gt $border) { continue }
    & $rac $ras session terminate "--cluster=$cluster" "--session=$($s.session)" @auth
    "$(Get-Date -Format s) завершён сеанс $($s.'user-name') с $($s.host)" |
        Add-Content "C:\Scripts\kill-idle-1c.log"
}

Фоновые задания, Конфигуратор и COM-подключения скрипт не трогает: их нет в списке $apps. Журнал в файле помогает разобраться, если утром кто-то спросит, куда пропал его несохранённый документ.

Пароль администратора кластера в скрипте лежит открытым текстом. Ограничьте доступ к файлу скрипта и к папке с ним правами NTFS: читать её должна только учётная запись, от которой работает задание.

Флажок в свойствах кластера

В свойствах кластера есть флажок «Принудительно завершать проблемные процессы». Он перезапускает рабочие процессы, которые превысили лимит памяти или перестали отвечать. На отдельных пользователей это не влияет, но спасает от ситуации, когда один зависший процесс держит десятки сеансов.

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

Видит ли пользователь, что его отключил администратор?
Да. Клиент показывает сообщение о завершении сеанса и предлагает перезапуск.
Сохранятся ли открытые документы при завершении сеанса?
Нет. Всё, что пользователь не записал, пропадёт. Уже записанные и проведённые документы остаются в базе без изменений.
Можно ли отключить пользователя в файловой базе?
В файловом варианте нет кластера и консоли. Работает форма «Активные пользователи» и блокировка работы пользователей. Если программа зависла у человека на компьютере, сеанс закрывают только у него.
Что делать, если забыт пароль администратора кластера?
Остановить службу агента сервера в нерабочее время и восстановить файлы настроек кластера из резервной копии, сделанной до смены пароля. Если копии нет — обратитесь к тому, кто настраивал сервер.
Освобождается ли лицензия сразу после удаления сеанса?
Да, клиентская лицензия освобождается в момент завершения сеанса, и новый пользователь может сразу войти.