Завершаем зависшие сеансы и соединения пользователей 1С 8.3
Содержание
Быстрее всего закрыть соединение в 1С через консоль администрирования серверов: Кластер → Информационные базы → <ваша база> → Сеансы, правый клик по сеансу и «Удалить». Пользователь сразу теряет связь с базой, лицензия освобождается. Для файловой базы консоли нет: там сеанс закрывают блокировкой работы пользователей или завершением процесса на компьютере сотрудника.
Типичная ситуация: нужно обновить конфигурацию , а база пишет, что в ней работает бухгалтер, который ушёл домой час назад. Или лицензии кончились, хотя половина офиса уже выключила компьютеры. Способы идут от мягкого к жёсткому: сначала консоль и сама программа, потом SQL и перезапуск сервера.
Сеанс и соединение: что именно вы закрываете
В клиент-серверной 1С 8.3 это два разных объекта, и путать их не стоит.
- 👤 Сеанс — логический вход пользователя в базу. У него есть имя пользователя, приложение («Тонкий клиент», «Конфигуратор», «Фоновое задание»), занятая лицензия, время начала.
- 🔌 Соединение — сетевой канал между клиентом и рабочим процессом
rphost. Сеанс может жить без соединения (спящий сеанс), а соединение может висеть без активного сеанса.
Отсюда практическое правило: чтобы освободить лицензию и снять блокировку базы, удаляют сеанс. Соединение закрывают отдельно, когда в списке остались «сироты», которые мешают монопольному доступу.
| Что видите | Что удалять | Где |
|---|---|---|
| Пользователь висит в списке, лицензия занята | Сеанс | Узел «Сеансы» базы |
| Сеансов нет, а монопольный режим не включается | Соединение | Узел «Соединения» базы |
| Висит фоновое задание | Сеанс с приложением «Фоновое задание» | Узел «Сеансы» |
| Всё зависло на одном рабочем процессе | Рабочий процесс | Перезапуск rphost или службы |
Удаление сеанса обрывает работу пользователя. Несохранённый документ пропадёт, незавершённая транзакция откатится. Предупредите человека, если он ещё на месте.
Закрыть соединение в консоли управления кластером
Консоль администрирования серверов 1С:Предприятия ставится вместе с платформой (компонент «Администрирование сервера 1С:Предприятия»). Она подключается к агенту сервера по порту 1540.
Пошагово
- Запустите «Администрирование серверов 1С Предприятия» из меню «Пуск».
- Если сервера нет в дереве: правый клик по «Central 1C:Enterprise 8.3 servers» → «Создать» → «Центральный сервер 1С:Предприятия 8.3». Укажите имя сервера, порт 1540.
- Раскройте
Кластеры → <кластер> → Информационные базы → <база> → Сеансы. - При запросе введите логин и пароль администратора кластера и пользователя базы с полными правами.
- Найдите нужного пользователя. Ориентируйтесь на колонки «Пользователь», «Компьютер», «Приложение», «Начало работы».
- Правый клик → «Удалить». Подтвердите.
Чтобы закрыть сеансы всех пользователей сразу, выделите строки с Shift или Ctrl и удалите их одним действием. Сеансы фоновых заданий удаляйте последними: они перезапустятся, если не заблокировать регламентные задания.
Если нужно закрыть именно соединение
В той же базе откройте соседний узел «Соединения». Там видно приложение, компьютер и номер рабочего процесса. Правый клик → «Разорвать соединение» (в разных версиях консоли пункт называется «Удалить» или «Разорвать»). Соединения конкретного rphost также видны в узле Рабочие процессы → <процесс> → Соединения.
💡 Если консоль не открывается и пишет, что оснастка не зарегистрирована, перерегистрируйте библиотеку от имени администратора. Путь зависит от версии платформы:
regsvr32 "C:\Program Files\1cv8\8.3.24.1548\bin\radmin.dll"
Номер версии подставьте свой, разрядность библиотеки должна совпадать с разрядностью установленной платформы.
Запретить новые входы на время работ
Удалённый пользователь может тут же зайти снова. Поэтому перед массовым закрытием откройте свойства базы в консоли и включите «Блокировка начала сеансов включена». Заполните сообщение и «Код разрешения». Тогда в базу пустят только того, кто запустит её с параметром /UC <код>. Там же есть флажок «Блокировка регламентных заданий включена».
Как завершить сеанс пользователя из 1С:Предприятия
Если доступа к серверу нет, а права администратора в базе есть, сеансы закрывают прямо из программы. Это работает в типовых конфигурациях на БСП: Бухгалтерии 3.0, ЗУП 3.1, УТ 11, КА, ERP.
Активные пользователи
- Откройте
Администрирование → Обслуживание. - В группе мониторинга пользователей откройте «Активные пользователи».
- Выделите сеанс и нажмите «Завершить сеанс».
Для клиент-серверной базы программа запросит пароль администратора кластера, если он задан. Без БСП, через Главное меню → Функции для технического специалиста → Стандартные → Активные пользователи, список можно только посмотреть, завершить сеанс оттуда нельзя.
Блокировка работы пользователей
Это самый аккуратный способ выгнать всех перед обновлением:
Администрирование → Обслуживание → Блокировка работы пользователей.- Задайте время начала и окончания, текст сообщения.
- Укажите код разрешения, чтобы зайти самому.
- Нажмите «Установить блокировку».
Пользователи получают предупреждение, у них есть несколько минут сохранить документы. Потом сеансы завершаются автоматически. Способ подходит и для файловых баз.
Ещё вариант для администратора: запустить базу с параметрами командной строки. Типовые конфигурации понимают их через БСП:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /S"srv1c\buh" /N"Администратор" /P"пароль" /C"ЗавершитьРаботуПользователей" /UC"12345"
После работ блокировку снимают параметром /C"РазрешитьРаботуПользователей" с тем же кодом /UC.
Принудительное завершение соединений через SQL
К этому способу приходят, когда в консоли 1С чисто, а СУБД всё равно держит блокировку или базу нельзя перевести в однопользовательский режим.
Удаление соединения в СУБД не закрывает сеанс 1С. Рабочий процесс получит ошибку, у пользователя вылетит сообщение об ошибке СУБД. Лицензия при этом остаётся занятой, пока сеанс не удалят в консоли.
MS SQL Server
Посмотреть, кто подключён к базе:
SELECT session_id, login_name, host_name, program_name, status
FROM sys.dm_exec_sessions
WHERE database_id = DB_ID('buh');
Закрыть одно соединение по номеру session_id:
KILL 57;
Выгнать всех и перевести базу в монопольный режим СУБД, например перед восстановлением из бэкапа:
ALTER DATABASE buh SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
-- работы с базой
ALTER DATABASE buh SET MULTI_USER;
PostgreSQL
SELECT pid, usename, client_addr, state, query_start
FROM pg_stat_activity
WHERE datname = 'buh';
SELECT pg_terminate_backend(pid)
FROM pg_stat_activity
WHERE datname = 'buh' AND pid <> pg_backend_pid();
Команда ROLLBACK IMMEDIATE и массовый pg_terminate_backend откатывают все незавершённые транзакции. Длинное проведение или закрытие месяца придётся запускать заново. Делайте это вне рабочего времени.
Остановка и перезапуск сервера 1С
Если сеансы не удаляются, консоль зависает или рабочий процесс съел всю память, остаётся перезапуск. Это затронет все базы кластера, а не одну.
Перезапуск рабочего процесса
- В консоли откройте
Рабочие процессыи посмотрите PID проблемного процесса. - В диспетчере задач Windows на вкладке «Подробности» найдите
rphost.exeс этим PID. - Завершите процесс. Агент кластера поднимет новый автоматически.
Сеансы на этом процессе оборвутся, на остальных процессах продолжат работу.
Перезапуск службы агента
Имя службы зависит от версии и разрядности. Посмотрите его в services.msc: ищите «Агент сервера 1С:Предприятия 8.3». Перезапуск из командной строки:
net stop "1C:Enterprise 8.3 Server Agent (x86-64)"
net start "1C:Enterprise 8.3 Server Agent (x86-64)"
На Linux найдите юнит командой systemctl list-units | grep srv1cv8 и перезапустите его через systemctl restart.
Если после перезапуска сеансы вернулись
Иногда «призраки» снова появляются в консоли после старта службы. Их источник — кэш сеансовых данных в каталоге кластера.
- Остановите службу агента.
- Откройте каталог
srvinfo\reg_1541(по умолчанию в профиле пользователя службы или вC:\Program Files\1cv8\srvinfo). - Удалите папки, имена которых начинаются с
snccntx. - Запустите службу.
Удаляйте только папки snccntx. Файлы 1CV8Clst.lst и 1CV8Reg.lst хранят список баз и настройки кластера. Сделайте копию всего srvinfo перед вмешательством.
Автоматизация закрытия сеансов через скрипты
Каждую ночь перед бэкапом или обновлением удобнее выгонять пользователей скриптом. Для этого используют утилиту rac и сервер администрирования ras.
Подготовка
Служба ras должна работать на сервере 1С. Её можно запустить вручную или зарегистрировать как службу, по умолчанию она слушает порт 1545:
"C:\Program Files\1cv8\8.3.24.1548\bin\ras.exe" cluster --port=1545 localhost:1540
Основные команды
rac localhost:1545 cluster list
rac localhost:1545 infobase summary list --cluster=<uuid-кластера>
rac localhost:1545 session list --cluster=<uuid-кластера> --infobase=<uuid-базы>
rac localhost:1545 session terminate --cluster=<uuid-кластера> --session=<uuid-сеанса>
Если на кластере задан администратор, добавьте --cluster-user и --cluster-pwd. Остальные параметры смотрите в справке rac help session.
Скрипт PowerShell: закрыть все сеансы базы
$rac = "C:\Program Files\1cv8\8.3.24.1548\bin\rac.exe"
$ras = "localhost:1545"
$baseName = "buh"
$cluster = (& $rac $ras cluster list | Select-String '^cluster\s+:\s+(\S+)').Matches[0].Groups[1].Value
$ibList = & $rac $ras infobase summary list --cluster=$cluster
$ib = $null
for ($i = 0; $i -lt $ibList.Count; $i++) {
if ($ibList[$i] -match '^infobase\s+:\s+(\S+)') { $current = $Matches[1] }
if ($ibList[$i] -match "^name\s+:\s+$baseName\s*$") { $ib = $current }
}
if (-not $ib) { Write-Host "База $baseName не найдена"; exit 1 }
$sessions = & $rac $ras session list --cluster=$cluster --infobase=$ib |
Select-String '^session\s+:\s+(\S+)' | ForEach-Object { $_.Matches[0].Groups[1].Value }
foreach ($s in $sessions) {
& $rac $ras session terminate --cluster=$cluster --session=$s
Write-Host "Завершён сеанс $s"
}
Скрипт берёт первый кластер на сервере, находит базу по имени и закрывает все её сеансы. Поставьте его в планировщик заданий Windows за 10–15 минут до бэкапа. Перед ним разошлите пользователям предупреждение или включите блокировку начала сеансов, иначе кто-то зайдёт обратно.
💡 Альтернатива без ras — COM-объект V83.COMConnector: через него подключаются к агенту, получают список сеансов базы и вызывают TerminateSession. Этот путь удобен, если скрипт уже работает внутри 1С или на VBScript.
Почему соединения зависают и как это диагностировать
Закрыть сеанс — полдела. Если «висяки» появляются каждый день, ищите причину.
Что смотреть в первую очередь
- 🔍 Колонка «Компьютер» в списке сеансов: часто «призраки» идут с одного терминального сервера.
- 🕒 Время начала и последней активности: сеанс, которому несколько дней, почти наверняка брошен.
- 📒 Журнал регистрации базы: события начала и конца сеанса, ошибки соединения.
- 🧠 Память
rphost: если процесс растёт без остановки, ограничьте объём памяти рабочих процессов в настройках кластера, чтобы агент перезапускал их сам.
Частые вопросы
Освободится ли лицензия сразу после удаления сеанса?
Можно ли закрыть сеанс без пароля администратора кластера?
rac не дадут удалить сеанс. Обратитесь к тому, кто настраивал сервер.Что будет с документом, который пользователь не сохранил?
Как закрыть сеанс в файловой базе без консоли?
1cv8.exe и 1cv8c.exe на компьютере сотрудника.