Принудительное отключение пользователей от серверной базы 1С

· 10 мин

Содержание

Чтобы завершить активные сеансы 1С в серверном режиме, откройте консоль администрирования кластера, найдите базу в ветке Информационные базы → <база> → Сеансы, выделите нужные сеансы и выполните команду «Удалить». Без графической консоли то же делает утилита rac: rac session terminate --cluster=<id> --session=<id>.

Сам по себе разрыв сеанса помогает ненадолго: пользователи, регламентные задания и внешние обмены тут же подключатся снова. Поэтому перед обновлением или выгрузкой базы сначала ставят запрет на вход, а уже потом отключают тех, кто остался. Ниже порядок действий для платформы 8.3 на Windows и Linux, разбор зависших подключений и готовый скрипт.

Что такое сеанс на сервере 1С и чем он отличается от соединения

Клиент сначала обращается к агенту сервера (порт 1540), тот передаёт его менеджеру кластера (1541), а работу с данными выполняет рабочий процесс rphost на порту из диапазона, заданного в свойствах рабочего сервера. Внутри кластера у каждого подключения есть две сущности:

  • 🧑‍💻 Сеанс — логическая «сессия» пользователя в конкретной базе: кто, с какого компьютера, каким клиентом, когда последний раз что-то делал. Сеанс занимает лицензию.
  • 🔌 Соединение — физический канал между клиентом и рабочим процессом. У одного сеанса в разные моменты могут быть разные соединения.

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

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

Приложение (в rac)Что этоМожно ли просто удалить
1CV8Cтонкий клиентда, пользователь увидит сообщение
1CV8толстый клиентда
WebClientвеб-клиент через браузерда
DesignerКонфигураторда, но несохранённые правки пропадут
BackgroundJobфоновое или регламентное заданиеда, но задание стартует снова, если не запретить
COMConnectionвнешняя обработка, обмен по COMда, внешняя программа переподключится
WSConnection, HTTPServiceConnectionвеб- и HTTP-сервисыда, сервис откроет новый сеанс при следующем запросе

Отсюда главный вывод: удалить все сеансы один раз мало. Надо закрыть источники новых подключений.

Завершение сеансов в консоли администрирования кластера

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

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

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

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

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

Пошагово

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

Пользователь, чей сеанс удалили, теряет несохранённые данные в открытых формах. Проведённые документы и записанные элементы остаются. Предупредите людей хотя бы за 5–10 минут.

Сеансы всех баз кластера разом видны в ветке <кластер> → Сеансы — удобно, когда нужно освободить лицензии , а не конкретную базу.

Ветка Соединения внутри рабочего процесса нужна, когда сеанса уже нет, а соединение держит базу. Здесь его можно разорвать отдельно.

Как завершить сеансы 1С через командную строку: ras и rac

Утилита rac — консольный клиент. Сама к кластеру она не подключается, ей нужен сервер администрирования ras. Это отдельный процесс, и по умолчанию он не запущен.

Запуск ras

На Windows ras удобно зарегистрировать службой. Пример для версии 8.3.24.1548, порт администрирования 1545:

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= "Сервер администрирования 1С 8.3"
sc start "1C:Enterprise 8.3 Remote Server"

На Linux достаточно запустить демоном из каталога платформы:

/opt/1cv8/x86_64/8.3.24.1548/ras cluster --daemon

Команды rac по порядку

Все команды ниже обращаются к localhost:1545. Если на кластере есть администратор, к каждой добавьте --cluster-user=<логин> --cluster-pwd=<пароль>.

  1. Узнайте идентификатор кластера:
rac cluster list localhost:1545
  1. Найдите идентификатор базы:
rac infobase summary list --cluster=<id кластера> localhost:1545
  1. Посмотрите сеансы базы:
rac session list --cluster=<id кластера> --infobase=<id базы> localhost:1545
  1. Завершите нужный сеанс по значению поля session:
rac session terminate --cluster=<id кластера> --session=<id сеанса> localhost:1545

Для соединений есть пара команд rac connection list и rac connection disconnect. Им нужен идентификатор рабочего процесса, его показывает rac process list. Полный перечень параметров для вашей версии выводит rac help session и rac help connection — набор ключей между релизами платформы немного менялся.

rac session list --licenses показывает, какую лицензию занимает каждый сеанс. Помогает, когда пользователи жалуются на нехватку лицензий, а в базе вроде бы никого нет.

Какой способ выбрать

СпособКогда удобенОграничения
Консоль кластера (MMC)разовое отключение, разбор глазамитолько Windows, нужна совпадающая версия
rac + rasLinux, удалённый сервер, скриптынужно держать запущенным ras
Блокировка из самой базыбухгалтер или админ без доступа к серверуработает, только если конфигурация на БСП

Запрет новых подключений и монопольный режим

Запрет входа ставится до отключения сеансов. Иначе вы удалите сеанс, а через минуту увидите его снова.

Блокировка в свойствах базы на кластере

В консоли откройте свойства информационной базы. На вкладке с параметрами блокировки:

  • ✅ включите «Блокировка начала сеансов включена»;
  • 🕒 при необходимости задайте начало и конец блокировки — например, с 22:00 до 23:30;
  • 💬 впишите сообщение, которое увидят пользователи при попытке войти;
  • 🔑 задайте код разрешения — с ним сможет зайти администратор;
  • ⏸ отдельно включите «Блокировка регламентных заданий включена», чтобы фоновые задания не открывали новые сеансы.

То же самое через rac:

rac infobase update --cluster=<id кластера> --infobase=<id базы> --infobase-user=Администратор --infobase-pwd=<пароль> --sessions-deny=on --scheduled-jobs-deny=on --denied-message="Идёт обновление, вход после 23:30" --permission-code=7755 localhost:1545

Снимают блокировку той же командой с --sessions-deny=off --scheduled-jobs-deny=off.

Не забудьте снять блокировку после работ — иначе утром никто не войдёт, а сообщение будет висеть с вечера.

Вход в заблокированную базу

Администратор заходит с кодом разрешения через параметр запуска /UC:

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

Для Конфигуратора режим меняется на DESIGNER, параметр /UC тот же.

Блокировка из интерфейса программы

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

Список активных пользователей из самой программы открывается так: Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи. Пункт «Функции для технического специалиста» включается в Сервис → Параметры.

Монопольный режим

Монопольный доступ нужен не для любой работы в Конфигураторе, а для обновления структуры базы, загрузки .dt, тестирования и исправления. Пока в базе есть чужие сеансы — включая фоновые задания и COM-соединения — платформа не даст его установить. Порядок такой: запрет входа и регламентных заданий → удаление сеансов → работа в Конфигураторе → снятие запрета.

Почему сеансы зависают и не завершаются

Бывает, что сеанс удалили, а он снова в списке, или удаление проходит, но база остаётся занятой. Причины проверяются по порядку.

Сеанс тут же появляется снова

  • 🔁 Регламентное задание по расписанию — проверьте, включена ли блокировка регламентных заданий.
  • 🔁 Внешняя программа по COM или веб-сервис — найдите компьютер в колонке «Компьютер» и остановите обмен на источнике.
  • 🔁 Пользователь просто зашёл заново — значит, не стоит запрет начала сеансов.

Сеанс висит часами без активности

Если клиентский компьютер выключили или пропала сеть, сервер какое-то время держит сеанс в «спящем» состоянии — на случай, если клиент вернётся. В списке это видно по времени последней активности, которое давно не меняется. Такой сеанс спокойно удаляется вручную.

Удаление не помогает: идёт долгая операция

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

Что посмотреть:

  1. Ветку Блокировки у базы в консоли: кто держит управляемые блокировки и кто их ждёт.
  2. Активность на стороне СУБД: в MS SQL — монитор активности или sp_who2, в PostgreSQL — представление pg_stat_activity. Долгий запрос с ожиданием блокировки виден сразу.
  3. Нагрузку процесса rphost в диспетчере задач или top.
-- PostgreSQL: запросы базы buh, которые идут дольше 10 минут
SELECT pid, state, now() - query_start AS duration, left(query, 120) AS query
FROM pg_stat_activity
WHERE datname = 'buh' AND now() - query_start > interval '10 minutes'
ORDER BY duration DESC;

Крайняя мера — перезапуск рабочего процесса

Если сеанс не уходит и транзакция не откатывается, остаётся завершить процесс rphost, который его обслуживает. Вместе с ним оборвутся сеансы всех пользователей, работающих через этот процесс, — в том числе в других базах. Делайте это вне рабочего времени или после общего предупреждения. Перезапуск службы агента сервера 1С тоже допустим, но он рвёт вообще все сеансы кластера.

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

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

Ночные обновления и выгрузки удобно делать скриптом: поставить запрет, завершить сеансы, выполнить работу, снять запрет. Ниже PowerShell-скрипт на основе rac. Он находит базу по имени и завершает все её сеансы.

$rac   = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$srv   = "localhost:1545"
$base  = "buh"                       # имя базы в кластере, латиницей
$auth  = @()                         # при админе кластера: @("--cluster-user=adm","--cluster-pwd=123")

# 1. Кластер
$line    = & $rac cluster list $srv | Select-String '^cluster\s*:' | Select-Object -First 1
$cluster = $line.ToString().Split(':')[1].Trim()

# 2. База по имени
$ib = $null; $cur = $null
foreach ($l in & $rac infobase summary list --cluster=$cluster @auth $srv) {
    if ($l -match '^infobase\s*:\s*(\S+)') { $cur = $Matches[1] }
    if ($l -match '^name\s*:\s*(\S+)' -and $Matches[1] -eq $base) { $ib = $cur }
}
if (-not $ib) { Write-Error "База $base не найдена"; exit 1 }

# 3. Завершение всех сеансов базы
$sessions = & $rac session list --cluster=$cluster --infobase=$ib @auth $srv |
    Select-String '^session\s*:\s*(\S+)' | ForEach-Object { $_.Matches[0].Groups[1].Value }

foreach ($s in $sessions) {
    & $rac session terminate --cluster=$cluster --session=$s @auth $srv
}
Write-Output ("Завершено сеансов: {0}" -f $sessions.Count)

Перед третьим шагом вставьте команду rac infobase update с --sessions-deny=on из раздела про блокировку, а в конце сценария — такую же с off. Запускают скрипт через Планировщик заданий Windows от учётной записи, у которой есть доступ к каталогу платформы.

Пароли администраторов кластера и базы в открытом виде в скрипте — риск. Ограничьте доступ к файлу правами NTFS и не кладите его в общую папку.

Для контроля, а не отключения, хватит того же rac session list по расписанию: выгружайте число сеансов в лог и смотрите, кто сидит в базе ночью, когда работать никто не должен. Часто так находятся забытые обмены и «вечные» сеансы бухгалтеров, которые не выходят из программы неделями.

Перед ночными работами на базе
Выполнено: 0 / 7

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

Можно ли завершить сеансы, если база файловая?
Нет, консоль кластера и rac работают только с серверными базами. В файловой базе пользователей отключают через обработку блокировки в самой конфигурации или закрытием клиентов на их компьютерах.
Освобождается ли лицензия сразу после удаления сеанса?
Да, лицензия возвращается в общий пул, как только сеанс завершён. Если сеанс висит в откате транзакции, лицензия освободится после окончания отката.
Чем удаление сеанса отличается от выхода пользователя?
При обычном выходе клиент закрывает формы и предлагает сохранить данные. При удалении сеанса сервер обрывает работу без вопросов, несохранённое в открытых формах теряется.
Можно ли отключить только неактивных пользователей?
Встроенной кнопки для этого нет. Отберите сеансы с давним временем последней активности в консоли или отфильтруйте поле last-active-at в выводе rac session list и завершайте их по одному.
Нужен ли запущенный ras, чтобы работала графическая консоль?
Нет. MMC-консоль подключается к агенту сервера напрямую, а ras нужен только для rac и сторонних утилит администрирования.